#Boa:Frame:CajaDiaria

import wx
import wx.grid
import consultasBD
import utiles
from decimal import Decimal
import sincronizar_tabla

def create(parent,rol = ""):
    return CajaDiaria(parent,rol)

[wxID_CAJADIARIA, wxID_CAJADIARIABUTTON1, wxID_CAJADIARIABUTTON2, 
 wxID_CAJADIARIABUTTON3, wxID_CAJADIARIABUTTON4, wxID_CAJADIARIABUTTON5, 
 wxID_CAJADIARIABUTTON6, wxID_CAJADIARIABUTTON7, wxID_CAJADIARIABUTTON8, 
 wxID_CAJADIARIADATEPICKERCTRL1, wxID_CAJADIARIADATEPICKERCTRL2, 
 wxID_CAJADIARIAGRID1, wxID_CAJADIARIAGRID2, wxID_CAJADIARIAPANEL1, 
 wxID_CAJADIARIASTATICTEXT1, wxID_CAJADIARIASTATICTEXT2, 
 wxID_CAJADIARIASTATICTEXT3, wxID_CAJADIARIATEXTCTRL2, 
] = [wx.NewId() for _init_ctrls in range(18)]

class CajaDiaria(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_CAJADIARIA, name='CajaDiaria',
              parent=prnt, pos=wx.Point(371, 16), size=wx.Size(772, 567),
              style=wx.DEFAULT_FRAME_STYLE, title='Caja Diaria')
        self.SetClientSize(wx.Size(764, 540))

        self.panel1 = wx.Panel(id=wxID_CAJADIARIAPANEL1, name='panel1',
              parent=self, pos=wx.Point(0, 0), size=wx.Size(764, 540),
              style=wx.TAB_TRAVERSAL)

        self.staticText1 = wx.StaticText(id=wxID_CAJADIARIASTATICTEXT1,
              label='Fecha', name='staticText1', parent=self.panel1,
              pos=wx.Point(8, 8), size=wx.Size(29, 13), style=0)

        self.staticText2 = wx.StaticText(id=wxID_CAJADIARIASTATICTEXT2,
              label='Sucursal', name='staticText2', parent=self.panel1,
              pos=wx.Point(240, 8), size=wx.Size(40, 13), style=0)

        self.datePickerCtrl1 = wx.DatePickerCtrl(id=wxID_CAJADIARIADATEPICKERCTRL1,
              name='datePickerCtrl1', parent=self.panel1, pos=wx.Point(8, 24),
              size=wx.Size(80, 21), style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)
        self.datePickerCtrl1.Bind(wx.EVT_DATE_CHANGED, self.OnCambiaFecha,
              id=wxID_CAJADIARIADATEPICKERCTRL1)

        self.datePickerCtrl2 = wx.DatePickerCtrl(id=wxID_CAJADIARIADATEPICKERCTRL2,
              name='datePickerCtrl2', parent=self.panel1, pos=wx.Point(88, 24),
              size=wx.Size(80, 21), style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)

        self.button6 = wx.Button(id=wxID_CAJADIARIABUTTON6, label='Procesar',
              name='button6', parent=self.panel1, pos=wx.Point(168, 24),
              size=wx.Size(56, 23), style=0)
        self.button6.Enable(False)
        self.button6.Bind(wx.EVT_BUTTON, self.OnProcesar,
              id=wxID_CAJADIARIABUTTON6)

        self.textCtrl2 = wx.TextCtrl(id=wxID_CAJADIARIATEXTCTRL2,
              name='textCtrl2', parent=self.panel1, pos=wx.Point(240, 24),
              size=wx.Size(184, 21), style=0, value='')
        self.textCtrl2.SetEditable(False)

        self.button4 = wx.Button(id=wxID_CAJADIARIABUTTON4, label='Egresos',
              name='button4', parent=self.panel1, pos=wx.Point(684, 304),
              size=wx.Size(75, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnEgreso,
              id=wxID_CAJADIARIABUTTON4)

        self.button5 = wx.Button(id=wxID_CAJADIARIABUTTON5, label='Ingresos',
              name='button5', parent=self.panel1, pos=wx.Point(684, 328),
              size=wx.Size(75, 23), style=0)
        self.button5.Bind(wx.EVT_BUTTON, self.OnIngreso,
              id=wxID_CAJADIARIABUTTON5)

        self.button1 = wx.Button(id=wxID_CAJADIARIABUTTON1, label='Imprimir',
              name='button1', parent=self.panel1, pos=wx.Point(684, 368),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnImprimir,
              id=wxID_CAJADIARIABUTTON1)

        self.button2 = wx.Button(id=wxID_CAJADIARIABUTTON2, label='Cierre Caja',
              name='button2', parent=self.panel1, pos=wx.Point(684, 400),
              size=wx.Size(75, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnCierre,
              id=wxID_CAJADIARIABUTTON2)

        self.button3 = wx.Button(id=wxID_CAJADIARIABUTTON3, label='Salir',
              name='button3', parent=self.panel1, pos=wx.Point(684, 504),
              size=wx.Size(75, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnSalir,
              id=wxID_CAJADIARIABUTTON3)

        self.grid1 = wx.grid.Grid(id=wxID_CAJADIARIAGRID1, name='grid1',
              parent=self.panel1, pos=wx.Point(-72, 48), size=wx.Size(832, 248),
              style=0)
        self.grid1.Bind(wx.EVT_SET_FOCUS, self.OnFocus1)

        self.grid2 = wx.grid.Grid(id=wxID_CAJADIARIAGRID2, name='grid2',
              parent=self.panel1, pos=wx.Point(-72, 312), size=wx.Size(744,
              216), style=0)
        self.grid2.Bind(wx.EVT_SET_FOCUS, self.OnFocus2)

        self.staticText3 = wx.StaticText(id=wxID_CAJADIARIASTATICTEXT3,
              label='Ingresos / Egresos', name='staticText3',
              parent=self.panel1, pos=wx.Point(8, 296), size=wx.Size(90, 13),
              style=0)

        self.button7 = wx.Button(id=wxID_CAJADIARIABUTTON7,
              label='Reenviar email agradecimientos', name='button7',
              parent=self.panel1, pos=wx.Point(584, 8), size=wx.Size(176, 24),
              style=0)
        self.button7.Bind(wx.EVT_BUTTON, self.OnReenviarEmailAgradecimientos,
              id=wxID_CAJADIARIABUTTON7)

        self.button8 = wx.Button(id=wxID_CAJADIARIABUTTON8, label='Reservados',
              name='button8', parent=self.panel1, pos=wx.Point(684, 432),
              size=wx.Size(75, 23), style=0)
        self.button8.Show(True)
        self.button8.Bind(wx.EVT_BUTTON, self.OnReservados,
              id=wxID_CAJADIARIABUTTON8)

    def __init__(self, parent,rol):
        self._init_ctrls(parent)
        self.verificaUltimoCierre()
        self.crearGrilla()
        self.llenarDatos()
        self.llenarGrilla2()
        self.button3.SetFocus()
        self.OnProcesar(None)
        print rol
        if rol!="root":
            self.button8.Show(False)

    def verificaUltimoCierre(self):
        sucursal = utiles.getSucursalActiva()
        sql = "SELECT cajacerrada FROM parametros WHERE sucursal='"+sucursal+"' "
        resultado = consultasBD.ordenCruda(sql)
        try:
            ultimoCierre = resultado[0][0].strftime("%Y-%m-%d")
        except:
            print "Error al obtener la fecha del Ultimo Cierre: VERIFIQUE"
            ultimoCierre = ""
        fecha = utiles.obtenerFecha("Y-m-d")
        if ultimoCierre<fecha:
            return
        self.button2.Enable(False)
        self.button4.Enable(False)
        self.button5.Enable(False)

    def OnFocus1(self, event):
        self.button4.SetFocus()

    def OnFocus2(self, event):
        self.button4.SetFocus()

    def OnSalir(self, event):
        self.Close()

    def ajustarAnchoColumnas(self):
        for y in xrange(self.grid1.GetNumberCols()):
            self.grid1.AutoSizeColumn(y,True)
        for y in xrange(self.grid2.GetNumberCols()):
            self.grid2.AutoSizeColumn(y,True)

    def crearGrilla(self):
        #Forma de pago,Descripcion,Egresos,Ingresos,Ventas,Subtotal,_,Sin actualizar,Recibos,Total
        #0             1           2       3        4      5        6 7              8       9
        columnas = ['Forma\nde pago','Descripcion','Egresos','Ingresos','Ventas','Subtotal','_','Sin\nactualizar','Recibos','Total']
        self.grid1.CreateGrid(1,len(columnas))
        for i, col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)

        self.grid1.SetSelectionMode(wx.grid.Grid.wxGridSelectRows)
        self.grid1.EnableEditing(False)
        self.grid1.Refresh()

        #Fecha,Observaciones,Tipo Pago,Descripcion,Usuario,EGRESO,INGRESO
        #0     1             2         3           4       5      6
        columnas = ['Fecha','Observaciones','Tipo\nPago','Descripcion','Usuario','EGRESO','INGRESO']
        self.grid2.CreateGrid(1,len(columnas))
        for i, col in enumerate(columnas): 
            self.grid2.SetColLabelValue(i, col)

        self.grid2.SetSelectionMode(wx.grid.Grid.wxGridSelectRows)
        self.grid2.EnableEditing(False)
        self.grid2.Refresh()

        self.ajustarAnchoColumnas()

    def OnEgreso(self, event):
        import CajaDiariaAjustes
        ajuste = CajaDiariaAjustes.Dialog1(self, "egreso")
        try:
            ajuste.ShowModal()
        except:
            pass
        self.llenarGrilla2()

    def OnIngreso(self, event):
        import CajaDiariaAjustes
        ajuste = CajaDiariaAjustes.Dialog1(self, "ingreso")
        try:
            ajuste.ShowModal()
        except:
            pass
        self.llenarGrilla2()
   
    def llenarDatos(self):
        self.textCtrl2.SetLabel(utiles.datosSucursal()[1])

    def limpiarGrilla1(self):
        self.grid1.ClearGrid()
        for item in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        self.grid1.AppendRows()

    def limpiarGrilla2(self):
        self.grid2.ClearGrid()
        for item in xrange(self.grid2.GetNumberRows()):
            self.grid2.DeleteRows()
        self.grid2.AppendRows()

    def llenarGrilla2(self):
        self.limpiarGrilla2()
        fecha = self.datePickerCtrl1.GetLabel()
        fecha = fecha.replace("/","-")
        fecha = utiles.invertirFecha(fecha)
        fecha1,fecha2 = self.rangoFecha()
        #fecha = utiles.obtenerFecha("Y-m-d")
        sql = "SELECT nombre,descripcion FROM valores WHERE tipo='0'"
        resultados = consultasBD.ordenCrudaDict(sql)
        tipovalores = {}
        for item in resultados:
            tipovalores[item["nombre"]]=item["descripcion"]
        r1 = "SELECT * FROM cajachica2 "
        r2 = "WHERE fecha BETWEEN '"+fecha1+"' AND '"+fecha2+"' ORDER BY fecha"
        sql = r1+r2
        resultados = consultasBD.ordenCrudaDict(sql)
        totalIngreso = Decimal("0.00")
        totalEgreso = Decimal("0.00")
        #Fecha,Observaciones,Tipo Pago,Descripcion,Usuario,EGRESO,INGRESO
        #0     1             2         3           4       5      6
        if len(resultados)==0 or resultados==None or resultados==():
            return
        for fil,item in enumerate(resultados):
            fecha = str(item["fecha"])[:10]
            fecha = utiles.invertirFecha2(fecha)
            self.grid2.SetCellValue(fil,0,fecha)
            self.grid2.SetCellValue(fil,1,item["observaciones"])
            self.grid2.SetCellValue(fil,2,item["idvalor"])
            try:
                self.grid2.SetCellValue(fil,3,tipovalores[item["idvalor"]])
            except:
                self.grid2.SetCellValue(fil,3,"")
            self.grid2.SetCellValue(fil,4,item["usuario"])
            if item["tipoalta"]=="INGRESO":
                self.grid2.SetCellValue(fil,5,"0.00")
                self.grid2.SetCellValue(fil,6,str(item["monto"]))
                totalIngreso = totalIngreso + Decimal(str(item["monto"]))
                self.grid2.SetCellAlignment(fil, 5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                self.grid2.SetCellAlignment(fil, 6, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            else:
                self.grid2.SetCellValue(fil,5,str(item["monto"]))
                self.grid2.SetCellValue(fil,6,"0.00")
                totalEgreso =totalEgreso + Decimal(str(item["monto"]))
                self.grid2.SetCellAlignment(fil, 5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                self.grid2.SetCellAlignment(fil, 6, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid2.AppendRows()
        totalIngreso = totalIngreso.quantize(Decimal("0.10"))
        totalEgreso = totalEgreso.quantize(Decimal("0.10"))
        self.grid2.SetCellValue(fil+1,1,"Subtotal")
        self.grid2.SetCellValue(fil+1,5,str(totalEgreso))
        self.grid2.SetCellValue(fil+1,6,str(totalIngreso))
        self.grid2.SetCellAlignment(fil+1, 5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid2.SetCellAlignment(fil+1, 6, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid2.AppendRows()
        self.grid2.AppendRows()
        self.grid2.SetCellValue(fil+3,1,"TOTAL")
        self.grid2.SetCellFont(fil+3,1,wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
          'Tahoma'))
        if totalIngreso<totalEgreso:
            total = totalEgreso-totalIngreso
            self.grid2.SetCellValue(fil+3,5,str(total))
            self.grid2.SetCellFont(fil+3,5,wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))
        else:
            total = totalIngreso-totalEgreso
            self.grid2.SetCellValue(fil+3,6,str(total))
            self.grid2.SetCellFont(fil+3,6,wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))
        self.grid2.SetCellAlignment(fil+3, 5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid2.SetCellAlignment(fil+3, 6, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.limpiarGrilla1()
        self.llenarGrilla1()
        self.ajustarAnchoColumnas()

    def rangoFecha(self):
        fecha1 = self.datePickerCtrl1.GetLabel()
        fecha1 = fecha1.replace("/","-")
        fecha1 = utiles.invertirFecha(fecha1)
        fecha1 = fecha1 + " 00:00:00"
        fecha2 = self.datePickerCtrl2.GetLabel()
        fecha2 = fecha2.replace("/","-")
        fecha2 = utiles.invertirFecha(fecha2)
        fecha2 = fecha2 + " 23:59:59"
        return fecha1,fecha2
            
    def consultaCajaChicaEgresos(self):
        fecha1,fecha2 = self.rangoFecha()
        #datos de caja chica: egresos
        r1 = "SELECT * FROM cajachica2 \n"
        r2 = "WHERE fecha BETWEEN '"+fecha1+"' AND '"+fecha2+"' \n"
        r3 = "AND tipoalta='EGRESO' "
        sql = r1+r2+r3

        cajachicaegresos = consultasBD.ordenCrudaDict(sql)
        return cajachicaegresos
        
    def consultaCajaChicaTotalEgresos(self):
        fecha1,fecha2 = self.rangoFecha()
        #datos de caja chica: TOTAL egresos
        r1 = "SELECT idvalor,SUM(monto) AS monto FROM cajachica2 \n"
        r2 = "WHERE fecha BETWEEN '"+fecha1+"' AND '"+fecha2+"' \n"
        r3 = "AND tipoalta='EGRESO' GROUP BY idvalor "
        sql = r1+r2+r3

        cajachicatotalegresos = consultasBD.ordenCrudaDict(sql)
        return cajachicatotalegresos

    def consultaCajaChicaIngreso(self):
        fecha1,fecha2 = self.rangoFecha()
        #datos de caja chica: ingresos
        r1 = "SELECT * FROM cajachica2 \n"
        r2 = "WHERE fecha BETWEEN '"+fecha1+"' AND '"+fecha2+"' \n"
        r3 = "AND tipoalta='INGRESO' "
        sql = r1+r2+r3

        cajachicaingresos = consultasBD.ordenCrudaDict(sql)
        return cajachicaingresos

    def consultaCajaChicaTotalIngreso(self):
        fecha1,fecha2 = self.rangoFecha()
        #datos de caja chica: TOTAL ingresos
        r1 = "SELECT idvalor,SUM(monto) AS monto FROM cajachica2 \n"
        r2 = "WHERE fecha BETWEEN '"+fecha1+"' AND '"+fecha2+"' \n"
        r3 = "AND tipoalta='INGRESO' GROUP BY idvalor "
        sql = r1+r2+r3

        cajachicatotalingreso = consultasBD.ordenCrudaDict(sql)
        return cajachicatotalingreso

    def consultaVentasConPagos(self):
        fecha1,fecha2 = self.rangoFecha()
        fecha1 = fecha1[:10]
        fecha2 = fecha2[:10]
        #extraigo los pagos
        r1 = "SELECT v.idformaticket, vtp.idformapagos, \n"
        r2 = "       vl.descripcion, SUM(vtp.monto) AS monto \n"
        r3 = "FROM ventas v, ventastienepagos vtp, valores vl \n"
        r4 = "WHERE vtp.fecha BETWEEN '"+fecha1+"' AND '"+fecha2+"' \n"
        r5 = "AND vtp.idventa = v.idventa \n"
        r6 = "AND vl.nombre=vtp.idformapagos \n"
        r7 = "GROUP BY vtp.idformapagos, v.idformaticket ORDER BY v.idformaticket \n"
        sql = r1+r2+r3+r4+r5+r6+r7

        ventasconpagos = consultasBD.ordenCrudaDict(sql)
        return ventasconpagos

    def consultaPagosCtasCtes(self):
        fecha1,fecha2 = self.rangoFecha()
        fecha1 = fecha1[:10]
        fecha2 = fecha2[:10]
        #extraigo pagos en cuentas corrientes
        r1 = "SELECT p1.idrecibo, p2.idformapago, p2.descripcion, SUM(p2.montopago) AS monto \n"
        r2 = "FROM \n"
        r3 = "   (SELECT DISTINCT idrecibo FROM vtas_ctasctestienepagos \n"
        r4 = "    WHERE fecha BETWEEN '"+fecha1+"' AND '"+fecha2+"') AS p1, \n"
        r5 = "   vtas_valores AS p2 \n"
        r6 = "WHERE p1.idrecibo = p2.idrecibo \n"
        r7 = "GROUP BY p2.idformapago ORDER BY p2.idformapago \n"
        sql = r1+r2+r3+r4+r5+r6+r7

        pagosctasctes = consultasBD.ordenCrudaDict(sql)
        return pagosctasctes

    def consultaVentasConCtasCtes(self):
        fecha1,fecha2 = self.rangoFecha()
        #extraigo monto de CC en ventas realizadas
        r1 = "SELECT v.idformaticket, cc.idformapagos, SUM(cc.montocuota) AS monto \n"
        r2 = "FROM ventas v, vtas_ctasctes cc \n"
        r3 = "WHERE v.fecha BETWEEN '"+fecha1+"' AND '"+fecha2+"' \n"
        r4 = "AND v.idventa=cc.idventa GROUP BY v.idformaticket, cc.idformapagos "
        sql = r1+r2+r3+r4

        ventasConCC = consultasBD.ordenCrudaDict(sql)
        return ventasConCC

    def consultaVentasCtasCtes(self):
        fecha1,fecha2 = self.rangoFecha()
        fecha1sin = fecha1[:10]
        fecha2sin = fecha2[:10]
        #extraigo monto de CC en ventas realizadas
        r1 = "SELECT facturado-pagado AS cc FROM \n"
        r2 = " (SELECT SUM(totalfactura) AS facturado FROM ventas \n"
        r3 = "  WHERE fecha BETWEEN '"+fecha1+"' AND '"+fecha2+"') AS p1, \n"
        r4 = " (SELECT SUM(monto) AS pagado FROM ventastienepagos \n"
        r5 = "  WHERE fecha BETWEEN '"+fecha1sin+"' AND '"+fecha2sin+"') AS p2 \n"
        r6 = "WHERE 1 "
        sql = r1+r2+r3+r4+r5+r6

        ventasCC = consultasBD.ordenCrudaDict(sql)
        return ventasCC

    def buscarFORMAenGrilla(self,idformapago):
        for x in xrange(self.grid1.GetNumberRows()):
            if self.grid1.GetCellValue(x,0)==idformapago:return x
        return -1

    def llenarGrilla1(self):
        #consultaVentasConPagos = self.consultaVentasConPagos()
        
        consultaCajaChicaEgresos = self.consultaCajaChicaEgresos()
        consultaCajaChicaIngreso = self.consultaCajaChicaIngreso()
        consultaVentasConPagos = self.consultaVentasConPagos()
        consultaPagosCtasCtes = self.consultaPagosCtasCtes()
        consultaVentasConCtasCtes = self.consultaVentasConCtasCtes()
        consultaVentasCtasCtes = self.consultaVentasCtasCtes()
        consultaCajaChicaTotalEgresos = self.consultaCajaChicaTotalEgresos()
        consultaCajaChicaTotalIngreso = self.consultaCajaChicaTotalIngreso()

        for item in consultaVentasConPagos:
            idformapagos = item["idformapagos"]
            descripcion = item["descripcion"]
            monto = Decimal(str(item["monto"])).quantize(Decimal("0.10"))
            idformaticket = item["idformaticket"]
            fil = self.buscarFORMAenGrilla(idformapagos)
            nuevo = True
            fila = self.grid1.GetNumberRows()-1
            if fil>=0:
                nuevo = False
                fila = fil

            #Forma de pago,Descripcion,Egresos,Ingresos,Ventas,Subtotal,_,Sin actualizar,Recibos,Total
            #0             1           2       3        4      5        6 7              8       9
            self.grid1.SetCellValue(fila,0,idformapagos)
            self.grid1.SetCellValue(fila,1,descripcion)
            if idformaticket == 1:
                self.grid1.SetCellValue(fila,4,str(monto))
            else:
                self.grid1.SetCellValue(fila,7,str(monto))
            
            self.grid1.SetCellAlignment(fila, 2, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fila, 3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fila, 4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fila, 5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fila, 7, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fila, 8, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fila, 9, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            
            if nuevo: self.grid1.AppendRows()

        for item in consultaPagosCtasCtes:
            idformapagos = item["idformapago"]
            descripcion = item["descripcion"]
            monto = Decimal(str(item["monto"])).quantize(Decimal("0.10"))
            fil = self.buscarFORMAenGrilla(idformapagos)
            nuevo = True
            fila = self.grid1.GetNumberRows()-1
            if fil>=0:
                nuevo = False
                fila = fil

            #Forma de pago,Descripcion,Egresos,Ingresos,Ventas,Subtotal,_,Sin actualizar,Recibos,Total
            #0             1           2       3        4      5        6 7              8       9
            self.grid1.SetCellValue(fila,0,idformapagos)
            self.grid1.SetCellValue(fila,1,descripcion)
            self.grid1.SetCellValue(fila,8,str(monto))
            
            self.grid1.SetCellAlignment(fila, 8, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            
            if nuevo: self.grid1.AppendRows()

        for item in consultaVentasConCtasCtes:
            idformapagos = item["idformapagos"]
            if idformapagos in ['CC','CC1','CC2','CC3','CC4','CC5']:
                pass
            else:
                idformapagos = 'CC'
            idformaticket = item["idformaticket"]
            monto = Decimal(str(item["monto"])).quantize(Decimal("0.10"))
            fil = self.buscarFORMAenGrilla(idformapagos)
            nuevo = True
            fila = self.grid1.GetNumberRows()-1
            if fil>=0:
                nuevo = False
                fila = fil

            #Forma de pago,Descripcion,Egresos,Ingresos,Ventas,Subtotal,_,Sin actualizar,Recibos,Total
            #0             1           2       3        4      5        6 7              8       9
            self.grid1.SetCellValue(fila,0,idformapagos)
            if idformaticket == 1:
                try:
                    valoranterior = Decimal(self.grid1.GetCellValue(fila,4))
                except:
                    valoranterior = Decimal("0.00")
                monto = valoranterior+monto
                self.grid1.SetCellValue(fila,4,str(monto))
            else:
                try:
                    valoranterior = Decimal(self.grid1.GetCellValue(fila,7))
                except:
                    valoranterior = Decimal("0.00")
                monto = valoranterior+monto
                self.grid1.SetCellValue(fila,7,str(monto))
            
            self.grid1.SetCellAlignment(fila, 4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fila, 7, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            
            if nuevo: self.grid1.AppendRows()

        for item in consultaCajaChicaTotalEgresos:
            idformapagos = item["idvalor"]
            monto = Decimal(str(item["monto"])).quantize(Decimal("0.10"))
            fil = self.buscarFORMAenGrilla(idformapagos)
            nuevo = True
            fila = self.grid1.GetNumberRows()-1
            if fil>=0:
                nuevo = False
                fila = fil

            #Forma de pago,Descripcion,Egresos,Ingresos,Ventas,Subtotal,_,Sin actualizar,Recibos,Total
            #0             1           2       3        4      5        6 7              8       9
            self.grid1.SetCellValue(fila,0,idformapagos)
##            try:
##                valoranterior = Decimal(self.grid1.GetCellValue(fila,2))
##            except:
##                valoranterior = Decimal("0.00")
##            monto = valoranterior+monto
            self.grid1.SetCellValue(fila,2,str(monto))
            self.grid1.SetCellAlignment(fila, 2, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)

            if nuevo: self.grid1.AppendRows()

        for item in consultaCajaChicaTotalIngreso:
            idformapagos = item["idvalor"]
            monto = Decimal(str(item["monto"])).quantize(Decimal("0.10"))
            fil = self.buscarFORMAenGrilla(idformapagos)
            nuevo = True
            fila = self.grid1.GetNumberRows()-1
            if fil>=0:
                nuevo = False
                fila = fil

            #Forma de pago,Descripcion,Egresos,Ingresos,Ventas,Subtotal,_,Sin actualizar,Recibos,Total
            #0             1           2       3        4      5        6 7              8       9
            self.grid1.SetCellValue(fila,0,idformapagos)
##            try:
##                valoranterior = Decimal(self.grid1.GetCellValue(fila,3))
##            except:
##                valoranterior = Decimal("0.00")
##            monto = valoranterior+monto
            self.grid1.SetCellValue(fila,3,str(monto))
            self.grid1.SetCellAlignment(fila, 3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)

            if nuevo: self.grid1.AppendRows()

        #llenar con 0 el resto de los casilleros
        for fil in xrange(self.grid1.GetNumberRows()-1):
            for col in xrange(self.grid1.GetNumberCols()):
                if col<2 or col==6: continue
                valor = self.grid1.GetCellValue(fil,col)
                if valor=="":
                    self.grid1.SetCellValue(fil,col,"0.00")
                    self.grid1.SetCellAlignment(fil,col,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)

        #CALCULA TOTALES
        for fil in xrange(self.grid1.GetNumberRows()):
            #Forma de pago,Descripcion,Egresos,Ingresos,Ventas,Subtotal,_,Sin actualizar,Recibos,Total
            #0             1           2       3        4      5        6 7              8       9
            if self.grid1.GetCellValue(fil,0)=="":
                continue
            egreso = Decimal(self.grid1.GetCellValue(fil,2))
            ingreso = Decimal(self.grid1.GetCellValue(fil,3))
            ventas = Decimal(self.grid1.GetCellValue(fil,4))
            subtotal = ventas+ingreso-egreso
            self.grid1.SetCellValue(fil,5,str(subtotal))
            self.grid1.SetCellAlignment(fil,5,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            en2 = Decimal(self.grid1.GetCellValue(fil,7))
            recibos = Decimal(self.grid1.GetCellValue(fil,8))
            total = subtotal+en2+recibos
            self.grid1.SetCellValue(fil,9,str(total))
            self.grid1.SetCellAlignment(fil,9,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)

        ultimafila = self.grid1.GetNumberRows()-1
        self.grid1.SetCellValue(ultimafila,1,"TOTAL")
        self.grid1.SetCellFont(ultimafila,1,wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))
        for col in xrange(self.grid1.GetNumberCols()):
            if col<2 or col==6:continue
            totalcolumna = Decimal("0.00")
            for fil in xrange(self.grid1.GetNumberRows()-1):
                #Forma de pago,Descripcion,Egresos,Ingresos,Ventas,Subtotal,_,Sin actualizar,Recibos,Total
                #0             1           2       3        4      5        6 7              8       9
                if self.grid1.GetCellValue(fil,0)=="":
                    continue
                valor = Decimal(self.grid1.GetCellValue(fil,col))
                totalcolumna = totalcolumna + valor
            self.grid1.SetCellValue(ultimafila,col,str(totalcolumna))
            self.grid1.SetCellAlignment(ultimafila,col,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetCellFont(ultimafila,col,wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.ajustarAnchoColumnas()

    def OnCambiaFecha(self, event):
        fecha = self.datePickerCtrl1.GetLabel()
        fecha = fecha.replace("/","-")
        fecha = utiles.invertirFecha(fecha)
        fechaactual = utiles.obtenerFecha("Y-m-d")
        self.button6.Enable(True)
        if fecha>fechaactual:
            #self.button1.Enable(False)
            self.button2.Enable(False)
            self.button4.Enable(False)
            self.button5.Enable(False)
            return
        if fecha==fechaactual:
            #self.button1.Enable(True)
            self.button2.Enable(True)
            self.button4.Enable(True)
            self.button5.Enable(True)
        if fecha<fechaactual:
            #self.button1.Enable(False)
            self.button2.Enable(False)
            self.button4.Enable(False)
            self.button5.Enable(False)
        self.button3.SetFocus()

    def OnProcesar(self, event):
        self.limpiarGrilla1()
        self.limpiarGrilla2()
        print "*"*66
        self.verificaUltimoCierre()
        self.llenarDatos()
        self.limpiarGrilla1()
        self.llenarGrilla1()
        self.limpiarGrilla2()
        self.llenarGrilla2()
        self.button6.Enable(False)
        self.button3.SetFocus()
        
    def consultasVentas(self,tipo="1"):
        fecha1,fecha2 = self.rangoFecha()
        r01 = "SELECT v.idventa, v.nrofactura, v.idcliente, c.nombre, \n"
        r02 = "       v.idformaticket, v.totalfactura, v.sucursal, \n"
        r03 = "       v.descuento AS dcto, v.iva, vtp.ptc, ptc.codsussan, \n"
        r04 = "       p.descri, vtp.cantidad, vtp.preciolista, vtp.descuento, \n"
        r05 = "       vtp.preciofinal, vd.nombre AS vendedora \n"
        r06 = "FROM ventas v, ventastieneproductos vtp, cliente c, \n"
        r07 = "     producto_talle_color ptc, productos p, vendedoras vd \n"
        r08 = "WHERE fecha BETWEEN  '"+fecha1+"' AND  '"+fecha2+"' \n"
        r09 = "      AND v.idventa = vtp.idticket AND c.idcliente = v.idcliente \n"
        r10 = "      AND vtp.ptc = ptc.id AND ptc.codsussan=p.codsussan \n"
##        r11 = "      AND v.idformaticket='"+tipo+"' AND v.usuario=vd.idvendedora \n"
        r11 = "      AND v.usuario=vd.idvendedora \n"
        r12 = "ORDER BY v.idformaticket,v.idventa,v.nrofactura "
        sql = r01+r02+r03+r04+r05+r06+r07+r08+r09+r10+r11
        print sql
        ventas = consultasBD.ordenCruda(sql)
        return ventas

    def consultasProveedoresVendidos(self):
        fecha1,fecha2 = self.rangoFecha()
        r1 = "SELECT p.proveedor, pv.nombre, SUM( vtp.cantidad ) AS total, p.preciolt1, p.preciocompra \n"
        r2 = "FROM ventas v, ventastieneproductos vtp, \n"
        r3 = "     producto_talle_color ptc, productos p, proveedor pv \n"
        r4 = "WHERE v.fecha BETWEEN '"+fecha1+"' AND '"+fecha2+"' \n"
        r5 = "      AND v.idventa=vtp.idticket AND vtp.ptc=ptc.id \n"
        r6 = "      AND ptc.codsussan=p.codsussan AND p.proveedor=pv.idproveedor \n"
        r7 = "GROUP BY p.proveedor ORDER BY total DESC "
        sql = r1+r2+r3+r4+r5+r6+r7
        ranking = consultasBD.ordenCruda(sql)
        return ranking

    def reportesVentas(self,ventas,mifecha,tipo=""):
        print "Imprimir Reportes de Ventas"
##        if tipo=="1":
##            f=open("c:\\matrisamor.doc\\reporte-ventasdiarias.html","w")
##        else:
##            f=open("c:\\matrisamor.doc\\reporte-ventasdiarias.html","a")
        #f=open("c:\\matrisamor.doc\\reporte-ventasdiarias.html","a")
        f=open("c:\\matrisamor.doc\\reporte-ventasdiarias.html","w")

        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        totalItemPorPagina = 45 #resto 6 estimando renglones de encabezado
        totalPaginas = len(ventas) / totalItemPorPagina
        totalPaginas+= 2

        def encabezadoPagina(texto):
            fecha = utiles.obtenerFecha("d-m-Y")
            sucursal = utiles.datosSucursal2()
            numero = str(sucursal[0])
            nombre = str(sucursal[1])
            telefono = str(sucursal[2])
            a = '<table width="100%" cellspacing="0" border="1"> \n'
            a+= '<tr><td> \n'
            a+= '<table width="100%" cellspacing="0" border="0"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left" width="50%"> \n'
            a+= '<strong>SUSSAN S.R.L. - Ventas<br>\n'
            a+= '<font size="1">'+numero+' '+nombre+' '+telefono+'</font></strong> ('+mifecha+')\n'
            a+= '</td> \n'
            a+= '<td valign="top" align="right" width="50%">'+fecha+' \n'
            a+= '<br>P&aacute;gina '+str(numeroPagina)+' / '+str(totalPaginas)+'</td> \n'
            a+= '</tr> \n'
            a+= '</table> \n'
            a+= '</td></tr> \n'
            a+= '</table><br>\n'
            texto+= a
            return texto

        def encabezadoTabla(texto,renglon):
            a = '<font size="0.5"> '
            a+= '<table width="100%" cellspacing="0" border="1"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="right"></td> \n'
            a+= '<td valign="top" align="left">Nro.<br>Interno</td> \n'
            a+= '<td valign="top" align="left">Nro.<br>Factura</td> \n'
            a+= '<td valign="top" align="left">Nro.Cliente/<br>P.T.C</td> \n'
            a+= '<td valign="top" align="left">Nombre /<br>Cod.Sussan+Descripci&oacute;n</td> \n'
            a+= '<td valign="top" align="left">Total $ /<br>Cantidad</td> \n'
            a+= '<td valign="top" align="right">Vendedora /<br>$</td> \n'
            a+= '<td valign="top" align="right">Dcto.</td> \n'
            a+= '<td valign="top" align="right">Precio<br>Final</td> \n'
            a+= '</tr> \n'
            a+= '<tr> \n'
            a+= '<td colspan="9"></td> \n'
            a+= '</tr> \n'
            texto+= a
            renglon+= 1
            return texto,renglon

        def piePagina(totalvendido,totaldescuentos,totalfactura,totalProductos,renglon):
            a = ''
##            a+= '<table width="100%" cellspacing="0" border="1"> \n'
##            a+= '<tr><td> \n'
##            a+= '<table width="100%" cellspacing="0" border="0"> \n'
##            a+= '<tr> \n'
##            a+= '<td valign="top" align="left" width="33%"> \n'
##            a = '<tr> \n'
##            a+= '<td valign="top" align="right" colspan="5">TOTALES</td> \n' #orden
##            a+= '<td valign="top" align="right">$'+str(totalfactura)+'</td> \n'
##            a+= '<td valign="top" align="right"></td> \n'
##            a+= '<td valign="top" align="right">$'+str(totaldescuentos)+'</td> \n'
##            a+= '<td valign="top" align="right">$'+str(totalvendido)+'</td> \n'
##            a+= '</tr> \n'
##            a+= '<tr> \n'
##            a+= '<td valign="top" align="right" colspan="5">Total productos vendidos</td> \n' #orden
##            a+= '<td valign="top" align="right">'+str(totalProductos)+'</td> \n'
##            a+= '<td valign="top" align="right"></td> \n'
##            a+= '<td valign="top" align="right"></td> \n'
##            a+= '<td valign="top" align="right"></td> \n'
##            a+= '</tr> \n'
##            a+= '</table> \n'
##            a+= '</td></tr> \n'
##            a+= '</table><br></font> \n'
##            renglon+= 2
            texto = a
            return texto,renglon

        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'

        renglon = 0
        orden = 0
        cadena = encabezadoPagina(cadena)
        cadena,renglon = encabezadoTabla(cadena,renglon)
        f.write(cadena)

        totalvendido = Decimal("0.00")
        totaldescuentos = Decimal("0.00")
        mitotalfactura = Decimal("0.00")
        try:
            anterior = ventas[0][0]
            anteriorCliente = ventas[0][2]
            anteriorTotal = Decimal(str(ventas[0][5])).quantize(Decimal("0.10"))
        except:
            anterior = ""
            anteriorCliente = ""
            anteriorTotal = Decimal("0.00")
        primeravez = True
        renglon = 1
        totalpagado = Decimal("0.00")
        totalProductos = 0
        
        for item in ventas:
            idventa = str(item[0])
            nrofactura = str(item[1]) 
            idcliente = str(item[2])
            if anterior != idventa:
                #corte de control
                r1 = "SELECT * FROM ventastienepagos "
                r2 = "WHERE idcliente='"+anteriorCliente+"' "
                r3 = "      AND idventa='"+anterior+"' "
                sql = r1+r2+r3
                pagados = consultasBD.ordenCrudaDict(sql)
                totalpagado = Decimal("0.00")
                for valor in pagados:
                    pagado_idformapago = str(valor["idformapagos"])
                    pagado_descripcion = str(valor["descrivalor"])
                    pagado_monto = Decimal(str(valor["monto"])).quantize(Decimal("0.10"))
                    totalpagado+= pagado_monto
                    pagado_monto = str(pagado_monto)
                    pagado_cuotas = str(valor["cuotas"])
                    pagado_recibo = str(valor["nrorecibo"])
                    orden+= 1
                    renglon+= 1
                    cadena = '<tr> \n'
                    cadena+= '<td valign="top" align="right">'+str(orden)+'</td> \n'
                    cadena+= '<td valign="top" align="left"></td> \n'
                    cadena+= '<td valign="top" align="left"></td> \n'
                    cadena+= '<td valign="top" align="right">'+pagado_idformapago+'</td> \n'
                    texto = pagado_descripcion[:15]+' ctas:'+pagado_cuotas+' Rec '+pagado_recibo
                    cadena+= '<td valign="top" align="left">'+texto+'</td> \n'
                    cadena+= '<td valign="top" align="right">$'+pagado_monto+'</td> \n'
                    cadena+= '<td valign="top" align="right"></td> \n'
                    cadena+= '<td valign="top" align="right"></td> \n'
                    cadena+= '<td valign="top" align="right"></td> \n'
                    cadena+= '</tr>\n'
                    f.write(cadena)
                diferencia = anteriorTotal-totalpagado
                if diferencia != Decimal("0.00"):
                    diferencia = str(diferencia)
                    orden+= 1
                    renglon+= 1
                    cadena = '<tr> \n'
                    cadena+= '<td valign="top" align="right">'+str(orden)+'</td> \n'
                    cadena+= '<td valign="top" align="left"></td> \n'
                    cadena+= '<td valign="top" align="left"></td> \n'
                    cadena+= '<td valign="top" align="right"></td> \n'
                    texto = "Cta.Cte.+Costo Financiero"
                    cadena+= '<td valign="top" align="left">'+texto+'</td> \n'
                    cadena+= '<td valign="top" align="right">$'+diferencia+'</td> \n'
                    cadena+= '<td valign="top" align="right"></td> \n'
                    cadena+= '<td valign="top" align="right"></td> \n'
                    cadena+= '<td valign="top" align="right"></td> \n'
                    cadena+= '</tr>\n'
                    f.write(cadena)
                cadena = '<tr> \n'
                cadena+= '<td valign="top" align="right" colspan="9"></td> \n'
                cadena+= '</tr>\n'
                f.write(cadena)
                primeravez = True
            nombre = str(item[3])
            idformaticket = str(item[4])
            totalfactura = str(item[5])
            sucursal = str(item[6])
            dctoglobal = str(item[7])
            iva = str(item[8])
            ptc = str(item[9])
            codsussan = str(item[10])
            descri = str(item[11])
            cantidad = str(item[12])
            preciolista = str(item[13])
            preciolista = str((Decimal(preciolista)*Decimal(cantidad)).quantize(Decimal("0.10")))
            descuento = str(item[14])
            preciofinal = str(item[15])
            vendedora = str(item[16])
            montodescuento = str(Decimal(preciolista)-Decimal(preciofinal))
            totalvendido+= Decimal(preciofinal)
            totaldescuentos+= Decimal(montodescuento)
            anterior = idventa
            anteriorCliente = idcliente
            anteriorTotal = Decimal(totalfactura)
            orden+= 1
            renglon+= 1
            if primeravez:
                cadena = '<tr> \n'
                cadena+= '<td valign="top" align="right">'+str(orden)+'</td> \n'
                cadena+= '<td valign="top" align="left">'+idventa+'</td> \n'
                cadena+= '<td valign="top" align="left">'+nrofactura+'</td> \n'
                cadena+= '<td valign="top" align="left">'+idcliente+'</td> \n'
                cadena+= '<td valign="top" align="left">'+nombre+' / '+idformaticket+'</td> \n'
                cadena+= '<td valign="top" align="right">$'+totalfactura+'</td> \n'
                cadena+= '<td valign="top" align="right">'+vendedora+'</td> \n'
                cadena+= '<td valign="top" align="right"></td> \n'
                cadena+= '<td valign="top" align="right"></td> \n'
                cadena+= '</tr>\n'
                f.write(cadena)
                mitotalfactura+= Decimal(totalfactura)
                orden+= 1
                renglon+= 1
                cadena = '<tr> \n'
                cadena+= '<td valign="top" align="right">'+str(orden)+'</td> \n'
                cadena+= '<td valign="top" align="left"></td> \n'
                cadena+= '<td valign="top" align="left"></td> \n'
                cadena+= '<td valign="top" align="right">'+ptc+'</td> \n'
                cadena+= '<td valign="top" align="right">'+codsussan+' '+descri[:20]+'</td> \n'
                cadena+= '<td valign="top" align="right">'+cantidad+'</td> \n'
                totalProductos+= int(cantidad)
                cadena+= '<td valign="top" align="right">'+preciolista+'</td> \n'
                cadena+= '<td valign="top" align="right">'+montodescuento+'</td> \n'
                cadena+= '<td valign="top" align="right">'+preciofinal+'</td> \n'
                cadena+= '</tr>\n'
                f.write(cadena)
                primeravez = False
            else:
                cadena = '<tr> \n'
                cadena+= '<td valign="top" align="right">'+str(orden)+'</td> \n'
                cadena+= '<td valign="top" align="left"></td> \n'
                cadena+= '<td valign="top" align="left"></td> \n'
                cadena+= '<td valign="top" align="right">'+ptc+'</td> \n'
                cadena+= '<td valign="top" align="right">'+codsussan+' '+descri[:20]+'</td> \n'
                cadena+= '<td valign="top" align="right">'+cantidad+'</td> \n'
                totalProductos+= int(cantidad)
                cadena+= '<td valign="top" align="right">'+preciolista+'</td> \n'
                cadena+= '<td valign="top" align="right">'+montodescuento+'</td> \n'
                cadena+= '<td valign="top" align="right">'+preciofinal+'</td> \n'
                cadena+= '</tr>\n'
                f.write(cadena)

            if renglon == totalItemPorPagina :
                cadena = '</table> \n'
                cadena,renglon = piePagina(totalvendido,totaldescuentos,mitotalfactura,totalProductos,renglon)
                f.write(cadena)
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena,renglon = encabezadoTabla(cadena,renglon)
                f.write(cadena)

        #corte de control
        r1 = "SELECT * FROM ventastienepagos "
        r2 = "WHERE idcliente='"+anteriorCliente+"' "
        r3 = "      AND idventa='"+anterior+"' "
        sql = r1+r2+r3
        pagados = consultasBD.ordenCrudaDict(sql)
        totalpagado = Decimal("0.00")
        for valor in pagados:
            pagado_idformapago = str(valor["idformapagos"])
            pagado_descripcion = str(valor["descrivalor"])
            pagado_monto = Decimal(str(valor["monto"])).quantize(Decimal("0.10"))
            totalpagado+= pagado_monto
            pagado_monto = str(pagado_monto)
            pagado_cuotas = str(valor["cuotas"])
            pagado_recibo = str(valor["nrorecibo"])
            orden+= 1
            renglon+= 1
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="right">'+str(orden)+'</td> \n'
            cadena+= '<td valign="top" align="left"></td> \n'
            cadena+= '<td valign="top" align="left"></td> \n'
            cadena+= '<td valign="top" align="right">'+pagado_idformapago+'</td> \n'
            texto = pagado_descripcion[:15]+' ctas:'+pagado_cuotas+' Rec '+pagado_recibo
            cadena+= '<td valign="top" align="left">'+texto+'</td> \n'
            cadena+= '<td valign="top" align="right">$'+pagado_monto+'</td> \n'
            cadena+= '<td valign="top" align="right"></td> \n'
            cadena+= '<td valign="top" align="right"></td> \n'
            cadena+= '<td valign="top" align="right"></td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)
        diferencia = anteriorTotal-totalpagado
        if diferencia != Decimal("0.00"):
            diferencia = str(diferencia)
            orden+= 1
            renglon+= 1
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="right">'+str(orden)+'</td> \n'
            cadena+= '<td valign="top" align="left"></td> \n'
            cadena+= '<td valign="top" align="left"></td> \n'
            cadena+= '<td valign="top" align="right"></td> \n'
            texto = "Cta.Cte.+Costo Financiero"
            cadena+= '<td valign="top" align="left">'+texto+'</td> \n'
            cadena+= '<td valign="top" align="right">$'+diferencia+'</td> \n'
            cadena+= '<td valign="top" align="right"></td> \n'
            cadena+= '<td valign="top" align="right"></td> \n'
            cadena+= '<td valign="top" align="right"></td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)

            if renglon == totalItemPorPagina :
                cadena = '</table> \n'
                cadena,renglon = piePagina(totalvendido,totaldescuentos,mitotalfactura,totalProductos,renglon)
                f.write(cadena)
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena,renglon = encabezadoTabla(cadena,renglon)
                f.write(cadena)

        cadena = '</table> \n'
        cadena,renglon = piePagina(totalvendido,totaldescuentos,mitotalfactura,totalProductos,renglon)
        f.write(cadena)
        f.write("</table><!-- salto de pagina -->\n")
        f.write("<p STYLE='page-break-after: always;'></p>\n")
        f.close()

        import os
        os.system("c:\\explorer.lnk c:\\matrisamor.doc\\reporte-ventasdiarias.html")

    def imprimirEncabezadoCierreDiario(self,mifecha):
        print "Imprimir Reporte Caratula..."
        f1=open("c:\\matrisamor.doc\\reporte-reportecajadiaria1.html","w")
        #f2=open("c:\\matrisamor.doc\\reporte-reportecajadiaria2.html","w")
        f2=open("c:\\matrisamor.doc\\reporte-reportedeventas.html","w")

        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        totalItemPorPagina = 50-6 #resto 6 estimando renglones de encabezado
        #totalPaginas = len(ventas) / totalItemPorPagina 
        #totalPaginas+= 1
        #totalPaginas = 1

        def encabezadoPagina(texto,tipo):
            fecha = utiles.obtenerFecha("d-m-Y")
            sucursal = utiles.datosSucursal2()
            numero = str(sucursal[0])
            nombre = str(sucursal[1])
            telefono = str(sucursal[2])
            a = '<table width="100%" cellspacing="0" border="1"> \n'
            a+= '<tr><td> \n'
            a+= '<table width="100%" cellspacing="0" border="0"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left" width="50%"> \n'
            a+= '<strong>SUSSAN S.R.L. - CAJA DIARIA ('+tipo+')<br>\n'
            a+= '<font size="1">'+numero+' '+nombre+' '+telefono+'</font></strong> ('+mifecha+')\n'
            a+= '</td> \n'
            a+= '<td valign="top" align="right" width="50%">'+fecha+' \n'
            a+= '<br>P&aacute;gina '+str(numeroPagina)+'</td> \n'
            a+= '</tr> \n'
            a+= '</table> \n'
            a+= '</td></tr> \n'
            a+= '</table><br>\n'
            texto+= a
            return texto

        def encabezadoTabla1(texto):
            a = ' '
            a = '<font size="2.5"> '
            a+= '<table width="100%" cellspacing="0" border="1"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="right">Forma<br>Pago</td> \n'
            a+= '<td valign="top" align="left">Descripci&oacute;n</td> \n'
            a+= '<td valign="top" align="left">Egresos</td> \n'
            a+= '<td valign="top" align="left">Ingresos</td> \n'
            a+= '<td valign="top" align="left">Ventas</td> \n'
            a+= '<td valign="top" align="left">Recibos</td> \n'
            a+= '<td valign="top" align="right">Total</td> \n'
            a+= '</tr> \n'
            a+= '<tr> \n'
            a+= '<td colspan="7"></td> \n'
            a+= '</tr> \n'
            texto+= a
            return texto

        def encabezadoTabla2(texto):
            a = ' '
            a = '<font size="0.5"> '
            a+= '<table width="100%" cellspacing="0" border="1"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left">Forma<br>Pago</td> \n'
            a+= '<td valign="top" align="left">Descripci&oacute;n</td> \n'
            a+= '<td valign="top" align="right">Egresos</td> \n'
            a+= '<td valign="top" align="right">Ingresos</td> \n'
            a+= '<td valign="top" align="right">Ventas</td> \n'
            a+= '<td valign="top" align="right">Subtotal</td> \n'
            a+= '<td valign="top" align="left"></td> \n'
            a+= '<td valign="top" align="right">No<br>actualizado</td> \n'
            a+= '<td valign="top" align="right">Recibos</td> \n'
            a+= '<td valign="top" align="right">Total</td> \n'
            a+= '</tr> \n'
            a+= '<tr> \n'
            a+= '<td colspan="10"></td> \n'
            a+= '</tr> \n'
            texto+= a
            return texto

        def encabezadoEgresosIngresos(texto):
            a = ' '
            a+= '<table width="100%" cellspacing="0" border="1"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left">Observaciones</td> \n'
            a+= '<td valign="top" align="left">Tipo<br>Pago</td> \n'
            a+= '<td valign="top" align="right">Descripci&oacute;n</td> \n'
            a+= '<td valign="top" align="right">Usuario</td> \n'
            a+= '<td valign="top" align="right">Egresos</td> \n'
            a+= '<td valign="top" align="right">Ingresos</td> \n'
            a+= '</tr> \n'
            a+= '<tr> \n'
            a+= '<td colspan="6"></td> \n'
            a+= '</tr> \n'
            texto+= a
            return texto

        def piePagina():
            puntos = 70
            a = '</font> '
            a+= '<table width="100%" cellspacing="2" border="0"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left" width="20%">Cajera ma&ntilde;ana</td> \n'
            a+= '<td valign="top" align="left" width="45%">'+'.'*puntos+'</td> \n'
            a+= '<td valign="top" align="left" width="5%">Hora</td> \n'
            a+= '<td valign="top" align="left" width="25%">..... : .....</td><br> \n'
            a+= '</tr> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left">Cajera tarde</td> \n'
            a+= '<td valign="top" align="left">'+'.'*puntos+'</td> \n'
            a+= '<td valign="top" align="left">Hora</td> \n'
            a+= '<td valign="top" align="left">..... : .....</td><br> \n'
            a+= '</tr> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left">CONTROL (noche)</td> \n'
            a+= '<td valign="top" align="left">'+'.'*puntos+'</td> \n'
            a+= '<td valign="top" align="left">Hora</td> \n'
            a+= '<td valign="top" align="left">..... : .....</td><br> \n'
            a+= '</tr> \n'
            a+= '</table> \n'

            puntos = 50
            a+= '<table width="100%" cellspacing="3" border="0"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left" > \n'
            a+= 'Total CAJA CHICA para el d&iacute;a siguiente: $'+'.'*puntos+' \n'
            a+= '</td><br> \n'
            a+= '</tr> \n'
            a+= '</table><br> \n'

            puntos = 120
            a+= '<table width="100%" cellspacing="3" border="0"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left" width="15%">OBSERVACIONES:</td>\n'
            a+= '<td valign="top" align="left" width="85%">'+'.'*puntos+'</td>\n'
            a+= '</tr> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left" width="15%"></td>\n'
            a+= '<td valign="top" align="left" width="85%">'+'.'*puntos+'</td>\n'
            a+= '</tr> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left" width="15%"></td>\n'
            a+= '<td valign="top" align="left" width="85%">'+'.'*puntos+'</td>\n'
            a+= '</tr> \n'
            a+= '</table>\n'
            texto = a
            return texto

        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'
        cadena2 = cadena

        cadena = encabezadoPagina(cadena,"1")
        cadena = encabezadoTabla1(cadena)
        f1.write(cadena)

        cadena = encabezadoPagina(cadena2,"2")
        cadena = encabezadoTabla2(cadena)
        f2.write(cadena)

        renglon = 1
        
        for fil in xrange(self.grid1.GetNumberRows()):
            if self.grid1.GetCellValue(fil,0)=="" and \
               self.grid1.GetCellValue(fil,1)!="TOTAL":
                continue
            formapago = self.grid1.GetCellValue(fil,0)
            descripcion = self.grid1.GetCellValue(fil,1)
            egresos = Decimal(self.grid1.GetCellValue(fil,2))
            ingresos = Decimal(self.grid1.GetCellValue(fil,3))
            ventas = Decimal(self.grid1.GetCellValue(fil,4))
            subtotal = Decimal(self.grid1.GetCellValue(fil,5))
            sinactualizar = Decimal(self.grid1.GetCellValue(fil,7))
            recibos = Decimal(self.grid1.GetCellValue(fil,8))
            total = Decimal(self.grid1.GetCellValue(fil,9))
            
            totalventas1 = -egresos+ingresos+ventas+recibos
            
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="left">'+formapago+'</td> \n'
            cadena+= '<td valign="top" align="left">'+descripcion+'</td> \n'
            cadena+= '<td valign="top" align="right">'+str(egresos*-1)+'</td> \n'
            cadena+= '<td valign="top" align="right">'+str(ingresos)+'</td> \n'
            cadena+= '<td valign="top" align="right">'+str(ventas)+'</td> \n'
            cadena+= '<td valign="top" align="right">'+str(recibos)+'</td> \n'
            cadena+= '<td valign="top" align="right">'+str(totalventas1)+'</td> \n'
            cadena+= '</tr>\n'
            f1.write(cadena)
            
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="left">'+formapago+'</td> \n'
            cadena+= '<td valign="top" align="left">'+descripcion+'</td> \n'
            cadena+= '<td valign="top" align="right">'+str(egresos*-1)+'</td> \n'
            cadena+= '<td valign="top" align="right">'+str(ingresos)+'</td> \n'
            cadena+= '<td valign="top" align="right">'+str(ventas)+'</td> \n'
            cadena+= '<td valign="top" align="right">'+str(subtotal)+'</td> \n'
            cadena+= '<td valign="top" align="right"></td> \n'
            cadena+= '<td valign="top" align="right">'+str(sinactualizar)+'</td> \n'
            cadena+= '<td valign="top" align="right">'+str(recibos)+'</td> \n'
            cadena+= '<td valign="top" align="right">'+str(total)+'</td> \n'
            cadena+= '</tr>\n'
            f2.write(cadena)

            renglon+= 1

            if renglon == totalItemPorPagina :
                cadena = '</table> \n'
                f1.write(cadena)
                f2.write(cadena)
                f1.write("</table><!-- salto de pagina -->\n")
                f1.write("<p STYLE='page-break-after: always;'></p>\n")
                f2.write("</table><!-- salto de pagina -->\n")
                f2.write("<p STYLE='page-break-after: always;'></p>\n")
                renglon = 0
                numeroPagina+= 1
                
                cadena = encabezadoPagina("","1")
                cadena = encabezadoTabla1(cadena)
                f1.write(cadena)

                cadena = encabezadoPagina("","2")
                cadena = encabezadoTabla2(cadena)
                f2.write(cadena)

        cadena = '</table> \n'
        #cadena = piePagina(totalvendido,totaldescuentos,mitotalfactura)

        f1.write(cadena)
        f2.write(cadena)

        cadena = '<hr>'
        cadena+= 'DETALLE INGRESOS / EGRESOS ('+mifecha+')<br>'
        cadena+= '<br>'
        f1.write(cadena)
        f2.write(cadena)

        renglon+= 4

        cadena = encabezadoEgresosIngresos("")
        f1.write(cadena)
        f2.write(cadena)

        for fil in xrange(self.grid2.GetNumberRows()):
            if self.grid2.GetCellValue(fil,1)=="":
                continue
            observaciones = self.grid2.GetCellValue(fil,1)
            formapago = self.grid2.GetCellValue(fil,2)
            descripcion = self.grid2.GetCellValue(fil,3)
            usuario = self.grid2.GetCellValue(fil,4)
            egreso = self.grid2.GetCellValue(fil,5)
            ingreso = self.grid2.GetCellValue(fil,6)
            
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="left">'+observaciones+'</td> \n'
            cadena+= '<td valign="top" align="left">'+formapago+'</td> \n'
            cadena+= '<td valign="top" align="right">'+descripcion+'</td> \n'
            cadena+= '<td valign="top" align="right">'+usuario+'</td> \n'
            cadena+= '<td valign="top" align="right">'+egreso+'</td> \n'
            cadena+= '<td valign="top" align="right">'+ingreso+'</td> \n'
            cadena+= '</tr>\n'
            f1.write(cadena)
            f2.write(cadena)

            renglon+= 1

            if renglon == totalItemPorPagina :
                cadena = '</table> \n'
                f1.write(cadena)
                f2.write(cadena)
                f1.write("</table><!-- salto de pagina -->\n")
                f1.write("<p STYLE='page-break-after: always;'></p>\n")
                f2.write("</table><!-- salto de pagina -->\n")
                f2.write("<p STYLE='page-break-after: always;'></p>\n")
                renglon = 0
                numeroPagina+= 1
                
                cadena = encabezadoEgresosIngresos("")
                f1.write(cadena)
                f2.write(cadena)

        cadena = '</table> \n'
        f1.write(cadena)
        f2.write(cadena)
        cadena = piePagina()
        f1.write(cadena)
        f2.write(cadena)

        f1.write("</table><!-- salto de pagina -->\n")
        f1.write("<p STYLE='page-break-after: always;'></p>\n")
        f1.close()
        f2.write("</table><!-- salto de pagina -->\n")
        f2.write("<p STYLE='page-break-after: always;'></p>\n")
        f2.close()
        
        import os
        os.system("c:\\explorer.lnk c:\\matrisamor.doc\\reporte-reportecajadiaria1.html")
        #os.system("c:\\explorer.lnk c:\\matrisamor.doc\\reporte-reportecajadiaria2.html")

    def rankingProveedores(self,ranking,mifecha):
        print "Imprimir Reportes de Stock"
        f=open("c:\\matrisamor.doc\\reporte-reportedeventas.html","a")
        
        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        totalItemPorPagina = 48 #resto 6 estimando renglones de encabezado
        totalPaginas = len(ranking) / totalItemPorPagina 
        totalPaginas+= 1

        def encabezadoPagina(texto):
            fecha = utiles.obtenerFecha("d-m-Y")
            sucursal = utiles.datosSucursal2()
            numero = str(sucursal[0])
            nombre = str(sucursal[1])
            telefono = str(sucursal[2])
            a = '<table width="100%" cellspacing="0" border="1"> \n'
            a+= '<tr><td> \n'
            a+= '<table width="100%" cellspacing="0" border="0"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left" width="33%"> \n'
            a+= '<strong>SUSSAN S.R.L.<br>REPORTE DE STOCK ('+mifecha+')<br>\n'
            a+= '<font size="1">'+numero+' '+nombre+' '+telefono+'</font></strong> \n'
            a+= '</td> \n'
            a+= '<td valign="top" align="right" width="33%">'+fecha+' \n'
            a+= '<br>P&aacute;gina '+str(numeroPagina)+' / '+str(totalPaginas)+'</td> \n'
            a+= '</tr> \n'
            a+= '</table> \n'
            a+= '</td></tr> \n'
            a+= '</table><br>\n'
            texto+= a
            return texto

        def encabezadoTabla(texto):
            a = '<strong>Ranking de Proveedores vendidos</strong><br><hr>'
            a+= '<font size="0.5"> '
            a+= '<table width="100%" cellspacing="0" border="0"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="right">Orden</td> \n'
            a+= '<td valign="top" align="right">C&oacute;digo<br>Proveedor</td> \n'
            a+= '<td valign="top" align="left">Nombre</td> \n'
            a+= '<td valign="top" align="right">Cantidad</td> \n'
            a+= '<td valign="top" align="right">Unitario<br>Venta</td> \n'
            a+= '<td valign="top" align="right">Total<br>Venta</td> \n'
            a+= '</tr> \n'
            a+= '<tr> \n'
            a+= '<td colspan="6"><hr></td> \n'
            a+= '</tr> \n'
            texto+= a
            return texto

        def encabezadoTabla2(texto):
            a = '<strong>Ajustes de Inventarios</strong><br><hr>'
            a+= '<font size="0.5"> '
            a+= '<table width="100%" cellspacing="0" border="0"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="right">Orden</td> \n'
            a+= '<td valign="top" align="right">PTC</td> \n'
            a+= '<td valign="top" align="left">CodSussan</td> \n'
            a+= '<td valign="top" align="right">Descripcion</td> \n'
            a+= '<td valign="top" align="right">Talle</td> \n'
            a+= '<td valign="top" align="right">Color</td> \n'
            a+= '<td valign="top" align="right">Diferencia</td> \n'
            a+= '<td valign="top" align="right"></td> \n'
            a+= '</tr> \n'
            a+= '<tr> \n'
            a+= '<td colspan="6"><hr></td> \n'
            a+= '</tr> \n'
            texto+= a
            return texto

        def piePagina(totalProductos,totalCosto,totalVenta):
            a = '<tr> \n'
            a+= '<td valign="top" align="right" colspan="3">TOTALES</td> \n' #orden
            a+= '<td valign="top" align="right">'+str(totalProductos)+'</td> \n'
            a+= '<td valign="top" align="right"></td> \n'
            a+= '<td valign="top" align="right">$'+str(totalVenta)+'</td> \n'
            a+= '</tr> \n'
            a+= '</table> \n'
            a+= '</font> '
            texto = a
            return texto

        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'

        cadena = encabezadoPagina(cadena)
        cadena = encabezadoTabla(cadena)
        f.write(cadena)

        renglon = 0
        orden = 0
        totalProductos = 0
        totalCosto = Decimal("0.00")
        totalVenta = Decimal("0.00")
        
        for item in ranking:
            idproveedor = item[0]
            nombre = item[1]
            cantidad = str(item[2])
            venta = Decimal(str(item[3])).quantize(Decimal("0.10"))
            costo = Decimal(str(item[4])).quantize(Decimal("0.10"))
            orden+= 1
            renglon+= 1
            
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="right">'+str(orden)+'</td> \n'
            cadena+= '<td valign="top" align="right">'+idproveedor+'</td> \n'
            cadena+= '<td valign="top" align="left">'+nombre+'</td> \n'
            cadena+= '<td valign="top" align="right">'+cantidad+'</td> \n'
            cadena+= '<td valign="top" align="right">'+str(venta)+'</td> \n'
            totalProductos+= int(cantidad)
            tcosto = int(cantidad)*costo
            totalCosto+= tcosto
            tventa = int(cantidad)*venta
            totalVenta+= venta
            cadena+= '<td valign="top" align="right">'+str(tventa)+'</td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)

            if renglon == totalItemPorPagina :
                cadena = '\n'
                cadena+= piePagina(totalProductos,totalCosto,totalVenta)
                f.write(cadena)
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")
                renglon = 0
                numeroPagina+= 1
                
                cadena = encabezadoPagina("")
                f.write(cadena)

        cadena = piePagina(totalProductos,totalCosto,totalVenta)
        f.write(cadena)

        f.write("</table><!-- salto de pagina -->\n")
        f.write("<p STYLE='page-break-after: always;'></p>\n")
        f.close()

    def imprimirTransferenciasPendientes(self,mifecha):
        sucursal = utiles.getSucursalActiva()
        r1 = "SELECT p3.id, p3.fecha, p6.nombre, p3.ptc, p4.codsussan, p5.descri, p3.cant \n"
        r2 = "FROM (SELECT p1.id, p1.fecha, p1.idsucorigen ,p2.ptc, p2.cant \n"
        r3 = "      FROM (SELECT id,fecha,idsucorigen FROM transferencias \n"
        r4 = "            WHERE estado='1' AND idsucdestino='"+str(sucursal)+"' \n"
        r5 = "            AND fecha>'2012-01-01 00:00:00') AS p1, \n"
        r6 = "            transferenciastieneproductos AS p2 \n"
        r7 = "      WHERE p1.id=p2.idtransferencia) AS p3, \n"
        r8 = "      producto_talle_color AS p4, \n"
        r9 = "      productos AS p5, sucursales AS p6  \n"
        r0 = "WHERE p3.ptc=p4.id AND p4.codsussan=p5.codsussan AND p3.idsucorigen=p6.codsucursal \n"
        rA = "ORDER BY p3.id,p3.ptc "
        sql = r1+r2+r3+r4+r5+r6+r7+r8+r9+r0
        resultados = consultasBD.ordenCrudaDict(sql)
        if resultados==None or resultados==() or len(resultados)==0:
            print "No se genera listado de Transferencias Pendientes"
            return False
        
        print "Imprimir Reportes de Transferencias Pendientes"
        f=open("c:\\matrisamor.doc\\reporte-reportedeventas.html","a")
        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        
        #id,fecha,nombre,ptc,codsussan,descri,cant
        #0  1     2      3   4         5      6
        totalItemPorPagina = 55
        totalPaginas = int(self.grid1.GetNumberRows()-1) / totalItemPorPagina 
        totalPaginas+= 1

        def encabezadoPagina(texto):
            fecha = utiles.obtenerFecha("d-m-Y")
            sucursal = utiles.datosSucursal2()
            numero = str(sucursal[0])
            nombre = str(sucursal[1])
            telefono = str(sucursal[2])
            a = '<table width="100%" cellspacing="0" border="1"> \n'
            a+= '<tr><td> \n'
            a+= '<table width="100%" cellspacing="0" border="0"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left" width="50%"> \n'
            a+= '<strong>SUSSAN S.R.L.<br>Transferencias Pendientes ('+mifecha+')<br>\n'
            a+= '<font size="1">'+numero+' '+nombre+' '+telefono+'</font></strong> \n'
            a+= '</td> \n'
            a+= '<td valign="top" align="right" width="50%">'+fecha+' \n'
            a+= '<br>P&aacute;gina '+str(numeroPagina)+' / '+str(totalPaginas)+'</td> \n'
            a+= '</tr> \n'
            a+= '</table> \n'
            a+= '</td></tr> \n'
            a+= '</table><br>\n'
            texto+= a
            return texto
        
        def encabezadoTabla(texto):
            #id,fecha,nombre,ptc,codsussan,descri,cant
            #0  1     2      3   4         5      6
            a = '<hr>'
            tama = '"0.05"'
            a+= '<table width="100%" cellspacing="1" border="0"> \n'
            a+= '<tr>\n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Orden</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>N&uacute;mero<br>Transferencia</font></td> \n'
            a+= '<td valign="top" align="center"><font size='+tama+'>Fecha</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Sucursal Origen</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>P.T.C.</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>CodSussan</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Descripci&oacute;n</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Cantidad</font></td> \n'
            a+= '</tr> \n'
            a+= '<tr>\n'
            a+= '<td colspan="8"><hr></td>\n'
            a+= '</tr>\n'
            texto+= a
            return texto
        
        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'

        cadena = encabezadoPagina(cadena)
        cadena = encabezadoTabla(cadena)
        f.write(cadena)

        i = 0
        renglon = 0
        anterior = ""
        for item in resultados:
            #id,fecha,nombre,ptc,codsussan,descri,cant
            #0  1     2      3   4         5      6
            i = i + 1
            orden = str(i)
            id = item["id"]
            if anterior == id:
                imprimir = ""
                fecha = ""
                sucursal = ""
            else:
                cadena = '<tr> \n'
                cadena+= '<td colspan="8"><hr></font></td> \n'
                cadena+= '</tr>\n'
                f.write(cadena)
                imprimir = id
                fecha = str(item["fecha"])[:10]
                sucursal = item["nombre"]
            anterior = id
            ptc = item["ptc"]
            codsussan = item["codsussan"]
            descripcion = item["descri"]
            cantidad = str(item["cant"])
            
            tama = '"0.2"'
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+orden+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+imprimir+'</font></td> \n'
            cadena+= '<td valign="top" align="center"><font size='+tama+'>'+fecha+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+sucursal+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+ptc+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+codsussan+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+descripcion+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+cantidad+'</font></td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)
            
            renglon+= 1
            
            if renglon == totalItemPorPagina :
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezadoTabla(cadena)
                f.write(cadena)

        cadena = '</table>\n'
        f.write(cadena)
        f.write("</table><!-- salto de pagina -->\n")
        f.write("<p STYLE='page-break-after: always;'></p>\n")
        f.close()
        
        return True

    def imprimirTransferenciasPendientes2(self,mifecha):
        sucursal = utiles.getSucursalActiva()
        r1="SELECT p1.id, p1.fecha, p3.nombre, p1.ptc, p1.codsussan, \n"
        r2="       p2.descri, p1.cant, p1.auditoria \n"
        r3="FROM (SELECT idtransferencia AS id, fecha, idsucorigen, ptc, \n"
        r4="             codsussan, cantidad AS cant, auditoria \n"
        r5="      FROM transferencia \n"
        r6="      WHERE estado='0' AND idsucdestino='"+str(sucursal)+"') AS p1, \n"
        r7="     productos AS p2, sucursales AS p3 \n"
        r8="WHERE p1.codsussan = p2.codsussan \n"
        r9="      AND p3.codsucursal=p1.idsucorigen ORDER BY p1.id, p1.ptc "
        sql = r1+r2+r3+r4+r5+r6+r7+r8+r9
        resultados = consultasBD.ordenCrudaDict(sql)
        if resultados==None or resultados==() or len(resultados)==0:
            print "No se genera listado de Transferencias Pendientes (2)"
            return False
        
        print "Imprimir Reportes de Transferencias Pendientes (2)"
##        f=open("c:\\matrisamor.doc\\reporte-TransferenciasPendientes.html","w")
        f=open("c:\\matrisamor.doc\\reporte-reportedeventas.html","a")
        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        
        #id,fecha,nombre,ptc,codsussan,descri,cant
        #0  1     2      3   4         5      6
        totalItemPorPagina = 55
        totalPaginas = int(self.grid1.GetNumberRows()-1) / totalItemPorPagina 
        totalPaginas+= 1

        def encabezadoPagina(texto):
            fecha = utiles.obtenerFecha("d-m-Y")
            sucursal = utiles.datosSucursal2()
            numero = str(sucursal[0])
            nombre = str(sucursal[1])
            telefono = str(sucursal[2])
            a = '<table width="100%" cellspacing="0" border="1"> \n'
            a+= '<tr><td> \n'
            a+= '<table width="100%" cellspacing="0" border="0"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left" width="50%"> \n'
            a+= '<strong>SUSSAN S.R.L.<br>Transferencias Pendientes ('+mifecha+') - nuevo sistema<br>\n'
            a+= '<font size="1">'+numero+' '+nombre+' '+telefono+'</font></strong> \n'
            a+= '</td> \n'
            a+= '<td valign="top" align="right" width="50%">'+fecha+' \n'
            a+= '<br>P&aacute;gina '+str(numeroPagina)+' / '+str(totalPaginas)+'</td> \n'
            a+= '</tr> \n'
            a+= '</table> \n'
            a+= '</td></tr> \n'
            a+= '</table><br>\n'
            texto+= a
            return texto
        
        def encabezadoTabla(texto):
            #orden,nroTransf,fecha,sucOrigen,quien..;tpc,codsussan,descri,cant
            #0     1         2     3         4       5   6         7      8
            a = '<hr>'
            tama = '"0.05"'
            a+= '<table width="100%" cellspacing="1" border="0"> \n'
            a+= '<tr>\n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Orden</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>N&uacute;mero<br>Transferencia</font></td> \n'
            a+= '<td valign="top" align="center"><font size='+tama+'>Fecha</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Sucursal Origen</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Qui&eacute;n lo<br>env&iacute;o?</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>P.T.C.</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>CodSussan</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Descripci&oacute;n</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Cantidad</font></td> \n'
            a+= '</tr> \n'
            a+= '<tr>\n'
            a+= '<td colspan="9"><hr></td>\n'
            a+= '</tr>\n'
            texto+= a
            return texto
        
        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'

        cadena = encabezadoPagina(cadena)
        cadena = encabezadoTabla(cadena)
        f.write(cadena)

        i = 0
        renglon = 0
        anterior = ""
        for item in resultados:
            #orden,nroTransf,fecha,sucOrigen,quien..;tpc,codsussan,descri,cant
            #0     1         2     3         4       5   6         7      8
            i = i + 1
            orden = str(i)
            id = item["id"]
            if anterior == id:
                imprimir = ""
                fecha = ""
                sucursal = ""
                usuario = ""
            else:
                cadena = '<tr> \n'
                cadena+= '<td colspan="9"><hr></font></td> \n'
                cadena+= '</tr>\n'
                f.write(cadena)
                imprimir = id
                fecha = str(item["fecha"])[:10]
                fecha = utiles.invertirFecha2(fecha)
                sucursal = item["nombre"]
                try:
                    usuario = (item["auditoria"]).split(":")[0]
                except:
                    usuario = item["auditoria"]
            anterior = id
            ptc = item["ptc"]
            codsussan = item["codsussan"]
            descripcion = item["descri"]
            cantidad = str(item["cant"])
            
            #orden,nroTransf,fecha,sucOrigen,quien..;tpc,codsussan,descri,cant
            #0     1         2     3         4       5   6         7      8
            tama = '"0.2"'
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+orden+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+imprimir+'</font></td> \n'
            cadena+= '<td valign="top" align="center"><font size='+tama+'>'+fecha+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+sucursal+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+usuario+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+ptc+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+codsussan+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+descripcion+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+cantidad+'</font></td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)
            
            renglon+= 1
            
            if renglon == totalItemPorPagina :
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezadoTabla(cadena)
                f.write(cadena)

        cadena = '</table>\n'
        f.write(cadena)
        f.write("</table><!-- salto de pagina -->\n")
        f.write("<p STYLE='page-break-after: always;'></p>\n")
        f.close()
        
        return True

    def consultasAjustesAprobadosCtasCtes(self):
        fecha = utiles.obtenerFecha("Y-m-d")
        r1 = "SELECT * FROM vtas_ctasctes_ajustes "
        r2 = "WHERE fecha BETWEEN '"+fecha+" 00:00:00' AND '"+fecha+" 23:59:59' \n"
        r3 = "      AND aprobado='1' "
        sql = r1+r2+r3
        aprobados = consultasBD.ordenCrudaDict(sql)
        return aprobados
    
    def consultasAjustesPendientesCtasCtes(self):
        r1 = "SELECT * FROM vtas_ctasctes_ajustes "
        r2 = "WHERE aprobado='0' "
        sql = r1+r2
        pendientes = consultasBD.ordenCrudaDict(sql)
        return pendientes

    def imprimirReportesDeAjustesCtasCtes(self,aprobados,pendientes,mifecha):
        print "Imprimir Reportes de Ajustes Ctas Ctes"
        
        f=open("c:\\matrisamor.doc\\reporte-otrosreportes.html","w")
        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        
        #idfactura,tipodoc,nrofactura,idproveedor,nombre,fechafactura,
        #0         1       2          3           4      5
        #fechaingreso,cantprendas,en1oen2,total,observaciones
        #6            7           8       9     10
        totalItemPorPagina = 55
        totalPaginas = (len(aprobados)+len(pendientes)) / totalItemPorPagina 
        totalPaginas+= 1

        def encabezadoPagina(texto):
            fecha = utiles.obtenerFecha("d-m-Y")
            sucursal = utiles.datosSucursal2()
            numero = str(sucursal[0])
            nombre = str(sucursal[1])
            telefono = str(sucursal[2])
            a = '<table width="100%" cellspacing="0" border="1"> \n'
            a+= '<tr><td> \n'
            a+= '<table width="100%" cellspacing="0" border="0"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left" width="33%"> \n'
            a+= '<strong>SUSSAN S.R.L.<br>AJUSTES EN CUENTAS CORRIENTES<br>\n'
            a+= '<font size="1">'+numero+' '+nombre+' '+telefono+'</font></strong><br> \n'
            a+= '<font size="1">Ref: 1 Casa Central - 2 Parana - 3 Saska - 4 Peatonal Sta Fe</font></strong><br> \n'
            a+= '</td> \n'
            a+= '<td valign="top" align="right" width="33%">'+fecha+' \n'
            a+= '<br>P&aacute;gina '+str(numeroPagina)+' / '+str(totalPaginas)+'</td> \n'
            a+= '</tr> \n'
            a+= '</table> \n'
            a+= '</td></tr> \n'
            a+= '</table><br>\n'
            texto+= a
            return texto

        def encabezado(texto):
            a = '<hr>'
            tama = '"0.05"'
            a+= '<table width="100%" cellspacing="1" border="0"> \n'
            a+= '<tr>\n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Orden</font></td> \n'
            a+= '<td valign="top" align="center"><font size='+tama+'>Sucursal</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Usuario</font></td> \n'
            a+= '<td valign="top" align="center"><font size='+tama+'>Fecha</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Cliente</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Tipo</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Descripcion</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>%</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>$</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Vieja<br>Deuda</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Nueva<br>Deuda</font></td> \n'
            a+= '</tr> \n'
            a+= '<tr>\n'
            a+= '<td colspan="11"><hr></td>\n'
            a+= '</tr>\n'
            texto+= a
            return texto

        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'

        cadena = encabezadoPagina(cadena)
        f.write(cadena)
        cadena = "<strong>AJUSTES APROBADOS</strong><br>"
        cadena = encabezado(cadena)
        f.write(cadena)

        renglon = 0
        orden = 0
        for item in aprobados:
            sucursal = str(int(str(item["sucursal"]))+1)
            usuario = str(item["usuario"])
            fecha = str(item["fecha"])[:10]
            fecha = utiles.invertirFecha2(fecha)
            cliente = str(item["nombre"])+" / "+str(item["idcliente"])
            tipo = str(item["tipooperacion"])
            if tipo == "RECA":
                tipo = "RECARGO"
            else:
                tipo = "DESCUENTO"
            descripcion = str(item["descripcion"])
            porcentaje = str(item["porcentaje"])
            pesos = str(item["valor"])
            viejadeuda = str(item["viejadeuda"])
            nuevadeuda = str(item["nuevadeuda"])
            
            orden+= 1
            renglon+= 1
            tama = '"0.2"'
            cadena = '<tr> \n'
            #orden,sucursal,usuario,fecha,cliente,tipo,descripcion,porcentaje,pesos,viejadeuda,nuevadeuda
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+str(orden)+'</font></td> \n'
            cadena+= '<td valign="top" align="center"><font size='+tama+'>'+sucursal+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+usuario+'</font></td> \n'
            cadena+= '<td valign="top" align="center"><font size='+tama+'>'+fecha+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+cliente+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+tipo+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+descripcion+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+porcentaje+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+pesos+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+viejadeuda+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+nuevadeuda+'</font></td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)

            if renglon == totalItemPorPagina :
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezado(cadena)
                f.write(cadena)

        cadena = '</table><br>\n'
        f.write(cadena)
        renglon+= 1
        
        cadena = "<strong>AJUSTES PENDIENTES DE APROBAR</strong><br>"
        cadena = encabezado(cadena)
        f.write(cadena)
        renglon+= 2

        orden = 0
        for item in pendientes:
            sucursal = str(int(str(item["sucursal"]))+1)
            usuario = str(item["usuario"])
            fecha = str(item["fecha"])[:10]
            fecha = utiles.invertirFecha2(fecha)
            cliente = str(item["nombre"])+" / "+str(item["idcliente"])
            tipo = str(item["tipooperacion"])
            if tipo == "RECA":
                tipo = "RECARGO"
            else:
                tipo = "DESCUENTO"
            descripcion = str(item["descripcion"])
            porcentaje = str(item["porcentaje"])
            pesos = str(item["valor"])
            viejadeuda = str(item["viejadeuda"])
            nuevadeuda = str(item["nuevadeuda"])
            
            orden+= 1
            renglon+= 1
            tama = '"0.2"'
            cadena = '<tr> \n'
            #orden,sucursal,usuario,fecha,cliente,tipo,descripcion,porcentaje,pesos,viejadeuda,nuevadeuda
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+str(orden)+'</font></td> \n'
            cadena+= '<td valign="top" align="center"><font size='+tama+'>'+sucursal+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+usuario+'</font></td> \n'
            cadena+= '<td valign="top" align="center"><font size='+tama+'>'+fecha+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+cliente+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+tipo+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+descripcion+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+porcentaje+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+pesos+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+viejadeuda+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+nuevadeuda+'</font></td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)

            if renglon == totalItemPorPagina :
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezado(cadena)
                f.write(cadena)

        cadena = '</table><br>\n'
        f.write(cadena)
        f.write("</table><!-- salto de pagina -->\n")
        f.write("<p STYLE='page-break-after: always;'></p>\n")

        f.close()

##        import os
##        os.system("c:\\explorer.lnk c:\\matrisamor.doc\\reporte-reportedeventas.html")

    def consultasCompras(self):
        fecha1,fecha2 = self.rangoFecha()
        sucursal = utiles.getSucursalActiva()
        r1 = "SELECT c.idfactura, c.tipodoc, c.nrofactura, c.idproveedor, \n"
        r2 = "       p.nombre, c.fechafactura, c.fechaingreso, c.cantprendas, \n"
        r3 = "       c.en1oen2, c.total, c.observaciones \n"
        r4 = "FROM compras c, proveedor p \n"
        r5 = "WHERE fechaingreso BETWEEN  '"+fecha1+"' AND  '"+fecha2+"' \n"
        r6 = "      AND c.idproveedor = p.idproveedor \n"
        r7 = "ORDER BY c.idproveedor "
        sql = r1+r2+r3+r4+r5+r6+r7
        compras = consultasBD.ordenCrudaDict(sql)
        return compras

    def consultasDevoluciones(self):
        fecha1,fecha2 = self.rangoFecha()
        sucursal = utiles.getSucursalActiva()
        r1 = "SELECT d.idDevolucion, d.idProveedor, p.nombre, d.fecha, \n"
        r2 = "       d.cantProductos, d.montoDevolucion, \n"
        r3 = "       d.causaDevolucion \n"
        r4 = "FROM comprasdevoluciones d, proveedor p \n"
        r5 = "WHERE fecha BETWEEN  '"+fecha1+"' AND  '"+fecha2+"' \n"
        r6 = "      AND d.idProveedor = p.idproveedor \n"
        r7 = "ORDER BY d.idProveedor "
        sql = r1+r2+r3+r4+r5+r6+r7
        devoluciones = consultasBD.ordenCrudaDict(sql)
        return devoluciones

    def consultasSugerencias(self):
        fecha1,fecha2 = self.rangoFecha()
        r1 = "SELECT cb.fecha,cb.codsussan,cb.costo,cb.sugerido,cb.final,p.descri, \n "
        r2 = "       pv.idproveedor,pv.nombre \n"
        r3 = "FROM comprascambiosprecios cb, productos p, proveedor pv \n"
        r4 = "WHERE cb.fecha BETWEEN  '"+fecha1+"' AND  '"+fecha2+"' \n"
        r5 = "      AND cb.codsussan=p.codsussan AND pv.idproveedor=p.proveedor "
        sql = r1+r2+r3+r4+r5
        sugerencias = consultasBD.ordenCrudaDict(sql)
        return sugerencias

    def imprimirReportesDeCompras(self,compras,devoluciones,sugeridos,mifecha):
        print "Imprimir Reportes de Compras"
        
        #f=open("c:\\matrisamor.doc\\reporte-otrosreportes.html","a")
        f=open("c:\\matrisamor.doc\\reporte-reportedeventas.html","a")
        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        
        #idfactura,tipodoc,nrofactura,idproveedor,nombre,fechafactura,
        #0         1       2          3           4      5
        #fechaingreso,cantprendas,en1oen2,total,observaciones
        #6            7           8       9     10
        totalItemPorPagina = 55
        totalPaginas = (len(compras)+len(devoluciones)+len(sugeridos)) / totalItemPorPagina 
        totalPaginas+= 1

        def encabezadoPagina(texto):
            fecha = utiles.obtenerFecha("d-m-Y")
            sucursal = utiles.datosSucursal2()
            numero = str(sucursal[0])
            nombre = str(sucursal[1])
            telefono = str(sucursal[2])
            a = '<table width="100%" cellspacing="0" border="1"> \n'
            a+= '<tr><td> \n'
            a+= '<table width="100%" cellspacing="0" border="0"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left" width="33%"> \n'
            a+= '<strong>SUSSAN S.R.L.<br>REPORTE DE COMPRAS/DEVOLUCIONES<br>\n'
            a+= '<font size="1">'+numero+' '+nombre+' '+telefono+'</font></strong> \n'
            a+= '</td> \n'
            a+= '<td valign="top" align="right" width="33%">'+fecha+' \n'
            a+= '<br>P&aacute;gina '+str(numeroPagina)+' / '+str(totalPaginas)+'</td> \n'
            a+= '</tr> \n'
            a+= '</table> \n'
            a+= '</td></tr> \n'
            a+= '</table><br>\n'
            texto+= a
            return texto
        
        def encabezadoTablaCompras(texto):
            a = '<hr>'
            tama = '"0.05"'
            a+= '<table width="100%" cellspacing="1" border="0"> \n'
            a+= '<tr>\n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Orden</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Tipo<br>Documento</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Numero<br>Documento</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Proveedor</font></td> \n'
            a+= '<td valign="top" align="center"><font size='+tama+'>Fecha</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Cant<br>Prendas</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Tipo</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Total</font></td> \n'
            a+= '</tr> \n'
            a+= '<tr>\n'
            a+= '<td colspan="8"><hr></td>\n'
            a+= '</tr>\n'
            texto+= a
            return texto
        
        def encabezadoTablaDevoluciones(texto):
            a = '<hr>'
            tama = '"0.05"'
            a+= '<table width="100%" cellspacing="1" border="0"> \n'
            a+= '<tr>\n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Orden</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Numero</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Proveedor</font></td> \n'
            a+= '<td valign="top" align="center"><font size='+tama+'>Fecha</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Cant<br>Prendas</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Total</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Causa</font></td> \n'
            a+= '</tr> \n'
            a+= '<tr>\n'
            a+= '<td colspan="8"><hr></td>\n'
            a+= '</tr>\n'
            texto+= a
            return texto

        def encabezadoTablaSugerencias(texto):
            a = '<hr>'
            tama = '"0.05"'
            a+= '<table width="100%" cellspacing="1" border="0"> \n'
            a+= '<tr>\n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Orden</font></td> \n'
            a+= '<td valign="top" align="center"><font size='+tama+'>Fecha</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Codigo<br>Sussan</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Descripci&oacute;n</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Proveedor</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Costo</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Precio<br>Sugerido</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Precio<br>Fijado</font></td> \n'
            a+= '</tr> \n'
            a+= '<tr>\n'
            a+= '<td colspan="8"><hr></td>\n'
            a+= '</tr>\n'
            texto+= a
            return texto

        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'

        cadena = encabezadoPagina(cadena)
        f.write(cadena)
        cadena = "<strong>COMPRAS</strong> ("+mifecha+")<br>"
        cadena = encabezadoTablaCompras(cadena)
        f.write(cadena)

        renglon = 0
        orden = 0
        print "Generando compras"
        for item in compras:
        #idfactura,tipodoc,nrofactura,idproveedor,nombre,fechafactura,
        #0         1       2          3           4      5
        #fechaingreso,cantprendas,en1oen2,total,observaciones
        #6            7           8       9     10
            tipodoc = str(item["tipodoc"])
            nrofactura = str(item["nrofactura"])
            idproveedor = str(item["idproveedor"])
            nombre = str(item["nombre"])+" / "+idproveedor
            fecha = str(item["fechafactura"])[:10]
            fecha = utiles.invertirFecha2(fecha)
            cantidad = str(item["cantprendas"])
            tipo = str(item["en1oen2"])
            total = Decimal(str(item["total"])).quantize(Decimal("0.10"))
            total = str(total)
            observaciones = str(item["observaciones"])

            # FactA 0 - FactC 1 - Rto1 2 - Rto2 3 - NtaCredito 4 - NtaDebito 5 
            # Otros2 6 - Otros1 7 - Pag1 8 - Pag2 9 - Credito2 10
            if tipodoc=="0":
                tipodoc = "Factura A"
            elif tipodoc=="1":
                tipodoc = "Factura C"
            elif tipodoc=="2":
                tipodoc = "Remito en 1"
            elif tipodoc=="3":
                tipodoc = "Remito en 2"
            elif tipodoc=="4":
                tipodoc = "Nta Credito"
            elif tipodoc=="5":
                tipodoc = "Nta Debito"
            elif tipodoc=="6":
                tipodoc = "Otros (2)"
            elif tipodoc=="7":
                tipodoc = "Otros (1)"
            else:
                pass
            
            orden+= 1
            renglon+= 1
            tama = '"0.2"'
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+str(orden)+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+tipodoc+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+nrofactura+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+nombre+'</font></td> \n'
            cadena+= '<td valign="top" align="center"><font size='+tama+'>'+fecha+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+cantidad+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+tipo+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+total+'</font></td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)

            if observaciones!="":
                orden+= 1
                renglon+= 1
                cadena+= '<td valign="top" align="right"><font size='+tama+'>'+str(orden)+'</font></td> \n'
                cadena+= '<td valign="top" align="right"><font size='+tama+'></font></td> \n'
                cadena+= '<td valign="top" align="right"><font size='+tama+'></font></td> \n'
                cadena+= '<td valign="top" align="left" colspan="5"><font size='+tama+'>'
                cadena+= '<strong>OBSERVACIONES:</strong> '+observaciones+'</font></td> \n'
                cadena+= '</tr>\n'
                f.write(cadena)
            
            if renglon >= totalItemPorPagina :
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezadoTablaCompras(cadena)
                f.write(cadena)

        cadena = '</table><br>\n'
        f.write(cadena)
        renglon+= 1
        
        cadena = "<strong>DEVOLUCIONES</strong> ("+mifecha+")<br>"
        cadena = encabezadoTablaDevoluciones(cadena)
        f.write(cadena)
        renglon+= 2

        orden = 0
        print "Generando devoluciones"
        for item in devoluciones:
        #idDevolucion,idProveedor,fecha,cantProductos,montoDevolucion,causDevolucion
        #0            1           2     3             4               5
            id = str(item["idDevolucion"])
            idproveedor = str(item["idProveedor"])
            nombre = str(item["nombre"])
            proveedor = nombre+" / "+idproveedor
            fecha = str(item["fecha"])[:10]
            fecha = utiles.invertirFecha2(fecha)
            cantidad = str(item["cantProductos"])
            total = Decimal(str(item["montoDevolucion"])).quantize(Decimal("0.10"))
            total = str(total)
            causa = str(item["causaDevolucion"])

            orden+= 1
            renglon+= 1
            tama = '"0.2"'
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+str(orden)+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+id+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+proveedor+'</font></td> \n'
            cadena+= '<td valign="top" align="center"><font size='+tama+'>'+fecha+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+cantidad+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+total+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+causa+'</font></td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)

            if renglon >= totalItemPorPagina :
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezadoTablaDevoluciones(cadena)
                f.write(cadena)

        cadena = '</table><br>\n'
        f.write(cadena)
        renglon+= 1

        cadena = "<strong>Diferencias de precios entre Sugerido y Fijado</strong> ("+mifecha+")<br>"
        cadena = encabezadoTablaSugerencias(cadena)
        f.write(cadena)
        renglon+= 2

        orden = 0
        print "Generando diferencias entre sugerido y final"
        for item in sugeridos:
        #fecha,codsussan,descripcion,proveedor,psugerido,pfijado
        #0     1         2           3         4         5
        #fecha,codsussan,sugerido,final,descri,idproveedor,nombre
            fecha = str(item["fecha"])[:10]
            fecha = utiles.invertirFecha2(fecha)
            codsussan = item["codsussan"]
            descripcion = item["descri"][:30]
            proveedor = item["nombre"]+" / "+str(item["idproveedor"])
            proveedor = proveedor[:25]
            costo = str(item["costo"])
            psugerido = str(item["sugerido"])
            pfinal = str(item["final"])
            
            orden+= 1
            renglon+= 1
            tama = '"0.2"'
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+str(orden)+'</font></td> \n'
            cadena+= '<td valign="top" align="center"><font size='+tama+'>'+fecha+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+codsussan+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+descripcion+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+proveedor+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+costo+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+psugerido+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+pfinal+'</font></td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)

            if renglon >= totalItemPorPagina :
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezadoTablaSugerencias(cadena)
                f.write(cadena)

        cadena = '</table><br>\n'
        f.write(cadena)
        f.write("</table><!-- salto de pagina -->\n")
        f.write("<p STYLE='page-break-after: always;'></p>\n")

        f.close()

##        import os
##        os.system("c:\\explorer.lnk c:\\matrisamor.doc\\reporte-reportedeventas.html")

    def OnImprimir(self, event):
        fecha1,fecha2 = self.rangoFecha()
        fecha1 = fecha1[:10]
        fecha1 = utiles.invertirFecha2(fecha1)
        fecha2 = fecha2[:10]
        fecha2 = utiles.invertirFecha2(fecha2)
        if fecha1==fecha2:
            fecha = fecha1
        else:
            fecha = fecha1+"/"+fecha2
        f=open("c:\\matrisamor.doc\\reporte-reportedeventas.html","w");f.close()
        f=open("c:\\matrisamor.doc\\reporte-otrosreportes.html","w");f.close()
        self.imprimirEncabezadoCierreDiario(fecha)
        ventas = self.consultasVentas()
        if ventas==() or ventas==None or len(ventas)==0:
            print "No se genera listado de Ventas: no hubo movimientos"
        else:
            self.reportesVentas(ventas,fecha,"1")
##        ventas2 = self.consultasVentas("2")
##        if ventas2==() or ventas2==None or len(ventas2)==0:
##            print "No se genera listado de Ventas 2: no hubo movimientos"
##            reportes.append("Ventas 2")
##        else:
##            self.reportesVentas(ventas2,fecha,"2")
        ranking = self.consultasProveedoresVendidos()
        if ranking==() or ranking==None or len(ranking)==0:
            print "No se genera listado de Ranking: no hubo movimientos"
        else:
            self.rankingProveedores(ranking,fecha1)
        impreso = self.imprimirTransferenciasPendientes(fecha1)
        impreso = self.imprimirTransferenciasPendientes2(fecha1)
        aprobados = self.consultasAjustesAprobadosCtasCtes()
        pendientes = self.consultasAjustesPendientesCtasCtes()
        if aprobados==() and pendientes ==():
            print "No se genera listado de Ajustes: no hubo movimientos"
        else:
            self.imprimirReportesDeAjustesCtasCtes(aprobados,pendientes,fecha)
        compras = self.consultasCompras()
        devoluciones = self.consultasDevoluciones()
        sugerencias = self.consultasSugerencias()
        if compras == () and devoluciones == () and sugerencias == ():
            print "No se genera listado de Compras y Devoluciones: no hubo movimientos"
        else:
            self.imprimirReportesDeCompras(compras,devoluciones,sugerencias,fecha)

        import os
##        #comentar la siguiente linea en la version final del sistema
##        os.system("c:\\explorer.lnk c:\\matrisamor.doc\\reporte-reportedeventas.html")
        os.system("c:\\explorer.lnk c:\\matrisamor.doc\\reporte-otrosreportes.html")

        try:
            print "Enviando e-mail de reportes"
            fecha = utiles.obtenerFecha("d-m-Y")
            idsucursal,nombre = utiles.datosSucursal()

            from mktsend import Sender
            username = 'sussan'
            password = 'suSSan42'
            
            subject = unicode(nombre+': CIERRE CAJA '+fecha,'utf-8')
            text = unicode('Se adjunta archivos','utf-8')
            f = open("c:\\matrisamor.doc\\reporte-reportedeventas.html","r")
            html = f.read()
            f.close()
            html = unicode(html,'utf-8')

            s = Sender(username, password)
            to = [unicode('sussanboutique@gmail.com','utf-8')]
            print s.send(to,subject,text,html) # Esta linea debe devolver un "OK"

        except:
            print
            utiles.mensaje(None,"No pudo enviarse e-mail de reportes")

    def procesandoCierreCaja(self):
        print "Cierre Z en impresora fiscal"
        fecha = utiles.obtenerFecha("Y-m-d")
        sucursal = utiles.getSucursalActiva()
        import fiscal
        fiscal.cierreZ()
        
        camposSQL = "cajacerrada='%s'" % fecha
        condicionSQL = "sucursal=%s" % sucursal
        
        try:
            consultasBD.executaUpdateSQL(self,"parametros",camposSQL,condicionSQL)
        except:
            utiles.mensaje(self, "ERROR: problemas para cerrar\nla caja del dia %s" % utiles.obtenerFecha("d-m-Y"))
            print "ERROR: problemas para Cerrar la caja del dia %s" % utiles.obtenerFecha("d-m-Y")

    def OnCierre(self, event):
        #cierra la caja del dia
        texto = "ATENCION: DESEA CERRAR LA CAJA?\n\n"
        texto+= "Este proceso es unico por dia.\n"
        texto+= "Cerrada la caja no podra emitir ninguna otra factura\n"
        texto+= "para la fecha actual, ni procesar ingresos o egresos.\n\n"
        texto+= "ACEPTAR = cierra caja               CANCELAR = salir"
        import Dialog2
        confirma = Dialog2.Dialog2(self, texto)
        try:
            confirma.ShowModal()
            if confirma.getSeleccion():
                seguir = True
            else:
                seguir = False
        except:
            return
        if not seguir:
            return

        #VERIFICACION DE IMPRESORA FISCAL
        texto = "ESTA PREPARADA LA IMPRESORA FISCAL??\n\n"
        texto+= "Verifique el papel de la impresora\n"
        texto+= "porque si se trataba o pierde,\n"
        texto+= "no podra reimprimir.\n\n"
        texto+= "ACEPTAR = ESTA LISTA       CANCELAR = salir"
        import Dialog2
        confirma = Dialog2.Dialog2(self, texto)
        try:
            confirma.ShowModal()
            if confirma.getSeleccion():
                seguir = True
            else:
                seguir = False
        except:
            return
        if not seguir:
            return

        self.button2.Enable(False)
        self.button4.Enable(False)
        self.button5.Enable(False)

        print "ALMACENANDO DATOS MENSUALES"
        self.almacenaDatosMensuales()

        try:
            print "CERRANDO CAJA"
            self.procesandoCierreCaja()

            import mailreportes
            try:
                print "ENVIANDO MAIL CON REPORTES CIERRE DIARIO"
                mailreportes.enviar()
            except:
                print "ERROR ENVIANDO MAIL CON REPORTES DEL CIERRE DIARIO"
                aux1 = "Error enviando mail de reportes\n"
                aux2 = "Anote este mensaje en los papeles del cierre\n"
                utiles.mensaje(None,aux1+aux2)

            import mailagradecimientos
            try:
                print "ENVIANDO MAIL DE AGRADECIMIENTOS"
                mailagradecimientos.enviar(self.datePickerCtrl1.GetLabel())
            except:
                print "ERROR ENVIANDO MAIL AGRADECIMIENTOS"
                aux1 = "Error enviando mail de agradecimientos\n"
                aux2 = "Anote este mensaje en los papeles del cierre"
                utiles.mensaje(None,aux1+aux2)

            utiles.mensaje(None, "Se Cerro la CAJA del dia %s" % utiles.obtenerFecha("d-m-Y"))

##            #Desactivado backup diario durante el cierre
##            print "BACKUP DE LA BASE DE DATOS"
##            import dbBackup
##            appBack = dbBackup.create(None)
##            appBack.Show()

        except:
            print "-> Error al cerrar la Caja"
            utiles.mensaje(None, "ERROR al cerrar la Caja")

##        import mailagradecimientos
##        print "ENVIANDO MAIL DE AGRADECIMIENTOS"
##        mailagradecimientos.enviar(self.datePickerCtrl1.GetLabel())

        #mostrando mensajes si hubiera alguno
        fecha = utiles.obtenerFecha("Y-m-d")
        sql = "SELECT * FROM mensajes WHERE fecha='"+fecha+"'"
        resultado = consultasBD.ordenCrudaDict(sql)
        if resultado==() or resultado==None or len(resultado)==0:
            print "No hay mensajes que mostrar"
        else:
            import mensajes
            dlg = mensajes.Dialog1(self,resultado,fecha)
            try:
                dlg.ShowModal()
            finally:
                dlg.Destroy() 

        #comentar despues de probar
##        self.button2.Enable(True)
##        self.button4.Enable(True)
##        self.button5.Enable(True)

    def almacenaDatosMensuales(self):
        fecha = utiles.obtenerFecha("Y-m-d")
        fecha1,fecha2 = utiles.getDaysExtreme()
        fecha1 = utiles.convertirFecha(fecha1)
        fecha1 = utiles.invertirFecha(fecha1) #Y-m-d
        fecha2 = utiles.convertirFecha(fecha2)
        fecha2 = utiles.invertirFecha(fecha2) #Y-m-d
        sucursal = utiles.getSucursalActiva()

        #stock al precio de compra
        r1="SELECT SUM(p5.total) AS total \n"
        r2="FROM \n"
        r3="   (SELECT p4.codsussan, p3.ptc, p4.preciocompra, p3.stock, \n"
        r4="           p3.stock*p4.preciocompra AS total \n"
        r5="    FROM (SELECT p2.codsussan, p1.ptc, p1.stock \n"
        r6="          FROM \n"
        r7="             (SELECT ptc,stock FROM stock \n"
        r8="              WHERE stock<>0 AND sucursal='"+sucursal+"') AS p1, \n"
        r9="             producto_talle_color AS p2 \n"
        r0="          WHERE p1.ptc=p2.id) AS p3, \n"
        rA="   productos AS p4 \n"
        rB="WHERE p3.codsussan=p4.codsussan) AS p5 WHERE 1 "
        sql = r1+r2+r3+r4+r5+r6+r7+r8+r9+r0+rA+rB
        print "Buscando stock segun precio costo"
        datos = consultasBD.ordenCrudaDict(sql)
        try:
            datos = datos[0]
            stockSegunCosto = Decimal(str(datos["total"])).quantize(Decimal("0.10"))
        except:
            stockSegunCosto = Decimal("0.00")

        #stock: existencias en items
        r1 = "SELECT SUM(stock) AS total FROM stock "
        r2 = "WHERE sucursal='"+sucursal+"' AND stock>0 "
        sql = r1+r2
        print "Stock segun items existentes"
        datos = consultasBD.ordenCrudaDict(sql)
        try:
            datos = datos[0]
            stockSegunItems = Decimal(str(datos["total"])).quantize(Decimal("0.10"))
        except:
            stockSegunItems = Decimal("0.00")

        #ventas realizadas en una sucursal segun costo del producto
        r1="SELECT SUM(cant) AS cantidad, SUM(total) AS total FROM \n"
        r2=" (SELECT p5.codsussan,p5.ptc,p5.cantidad AS cant,p6.preciocompra, \n"
        r3="         p6.preciocompra*p5.cantidad AS total \n"
        r4="  FROM (SELECT p4.codsussan,p3.ptc,p3.cantidad \n"
        r5="        FROM (SELECT p2.ptc, p2.cantidad \n"
        r6="              FROM \n"
        r7="                  (SELECT idventa FROM ventas \n"
        r8="                   WHERE fecha BETWEEN '"+fecha1+" 00:00:00' \n"
        r9="                               AND '"+fecha2+" 23:59:59' \n"
        r0="                         AND sucursal='"+sucursal+"') AS p1, \n"
        rA="                  ventastieneproductos AS p2 \n"
        rB="              WHERE p2.idticket=p1.idventa) AS p3, \n"
        rC="        producto_talle_color AS p4 \n"
        rD="        WHERE p3.ptc=p4.id) AS p5, \n"
        rE="       productos AS p6 \n"
        rF="WHERE p5.codsussan=p6.codsussan) AS p7 WHERE 1 \n"
        sql = r1+r2+r3+r4+r5+r6+r7+r8+r9+r0+rA+rB+rC+rD+rE+rF
        print "Buscando datos de ventas segun costo del producto"
        datos = consultasBD.ordenCrudaDict(sql)
        try:
            datos = datos[0]
            vendidoCosto = Decimal(str(datos["total"])).quantize(Decimal("0.10"))
            vendidoItems = Decimal(str(datos["cantidad"])).quantize(Decimal("0.10"))
        except:
            vendidoCosto = Decimal("0.00")
            vendidoItems = Decimal("0.00")

        #ventas realizadas en una sucursal segun precio de venta
        r1 = "SELECT SUM(totalfactura) AS total FROM ventas "
        r2 = "WHERE fecha BETWEEN '"+fecha1+" 00:00:00' AND '"+fecha2+" 23:59:59' "
        sql = r1+r2
        print "Buscando datos de ventas segun precio de venta"
        datos = consultasBD.ordenCrudaDict(sql)
        try:
            datos = datos[0]
            vendidoSegunPrecioVentas = Decimal(str(datos["total"])).quantize(Decimal("0.10"))
        except:
            vendidoSegunPrecioVentas = Decimal("0.00")

        #transferencias en items (viejo sistema): enviados
        r1="SELECT SUM(cant) AS stock "
        r2="FROM (SELECT id FROM transferencias "
        r3="      WHERE idsucorigen='"+sucursal+"' "
        r4="            AND fecha BETWEEN '"+fecha1+" 00:00:00' "
        r5="                      AND '"+fecha2+" 23:59:59' ) AS p1, "
        r6="     transferenciastieneproductos AS p2 "
        r7="WHERE p1.id=p2.idtransferencia "
        sql = r1+r2+r3+r4+r5+r6+r7
        print "Buscando cantidad de items transferidos hacia otras sucursales (1)"
        datos = consultasBD.ordenCrudaDict(sql)
        try:
            datos = datos[0]
            itemsTransferidosEnviados = Decimal(str(datos["stock"])).quantize(Decimal("0.10"))
        except:
            itemsTransferidosEnviados = Decimal("0.00")

        #transferencias en items (viejo sistema): recibidos
        r1="SELECT SUM(cant) AS stock "
        r2="FROM (SELECT id FROM transferencias "
        r3="      WHERE idsucdestino='"+sucursal+"' "
        r4="            AND fecha BETWEEN '"+fecha1+" 00:00:00' "
        r5="                      AND '"+fecha2+" 23:59:59' ) AS p1, "
        r6="     transferenciastieneproductos AS p2 "
        r7="WHERE p1.id=p2.idtransferencia "
        sql = r1+r2+r3+r4+r5+r6+r7
        
        print "Buscando cantidad de items transferidos a esta sucursal (1)"
        datos = consultasBD.ordenCrudaDict(sql)
        try:
            datos = datos[0]
            itemsTransferidosRecibidos = Decimal(str(datos["stock"])).quantize(Decimal("0.10"))
        except:
            itemsTransferidosRecibidos = Decimal("0.00")

        #transferencias en items (nuevo sistema): enviados
        r1="SELECT SUM(cantidad) AS stock FROM transferencia "
        r2="WHERE fecha BETWEEN '"+fecha1+" 00:00:00' AND '"+fecha2+" 23:59:59' "
        r3="      AND idsucorigen='"+sucursal+"' "
        sql = r1+r2+r3
        print
        print "Buscando cantidad de items transferidos hacia otras sucursales (2)"
        datos = consultasBD.ordenCrudaDict(sql)
        try:
            datos = datos[0]
            itemsTransferidosEnviados2 = Decimal(str(datos["stock"])).quantize(Decimal("0.10"))
        except:
            itemsTransferidosEnviados2 = Decimal("0.00")

        #transferencias en items (nuevo sistema): recibidos
        r1="SELECT SUM(cantidad) AS stock FROM transferencia "
        r2="WHERE fecha BETWEEN '"+fecha1+" 00:00:00' AND '"+fecha2+" 23:59:59' "
        r3="      AND idsucdestino='"+sucursal+"' "
        sql = r1+r2+r3
        
        print "Buscando cantidad de items transferidos a esta sucursal (2)"
        datos = consultasBD.ordenCrudaDict(sql)
        try:
            datos = datos[0]
            itemsTransferidosRecibidos2 = Decimal(str(datos["stock"])).quantize(Decimal("0.10"))
        except:
            itemsTransferidosRecibidos2 = Decimal("0.00")

        transferenciasEnviadas = itemsTransferidosEnviados + itemsTransferidosEnviados2
        transferenciasRecibidas = itemsTransferidosRecibidos + itemsTransferidosRecibidos2

        #transferencia en plata (precio costo): egresos - viejo sistema
        r1="SELECT SUM(p7.total) AS total \n"
        r2="FROM (SELECT p5.codsussan,p5.ptc,p6.descri,p6.preciocompra,\n"
        r3="             p5.stock,p5.stock*p6.preciocompra as total \n"
        r4="      FROM (SELECT p4.codsussan,p3.ptc,p3.stock \n"
        r5="            FROM (SELECT p2.ptc, p2.cant as stock \n"
        r6="                  FROM (SELECT id FROM transferencias \n"
        r7="                        WHERE idsucorigen='"+sucursal+"' \n"
        r8="                              AND fecha BETWEEN '"+fecha1+" 00:00:00' \n"
        r9="                                        AND '"+fecha2+" 23:59:59') AS p1, \n"
        r0="                       transferenciastieneproductos AS p2 \n"
        rA="                  WHERE p1.id=p2.idtransferencia) AS p3, \n"
        rB="           producto_talle_color AS p4 \n"
        rC="      WHERE p4.id=p3.ptc) AS p5, productos AS p6 \n"
        rD="WHERE p5.codsussan=p6.codsussan) AS p7 "
        sql = r1+r2+r3+r4+r5+r6+r7+r8+r9+r0+rA+rB+rC+rD
        print "Buscando valor al costo de items transferidos a esta sucursal (1)"
        datos = consultasBD.ordenCrudaDict(sql)
        try:
            datos = datos[0]
            itemsCostoTransferidosEnviados1 = Decimal(str(datos["total"])).quantize(Decimal("0.10"))
        except:
            itemsCostoTransferidosEnviados1 = Decimal("0.00")

        #transferencia en plata (precio costo): egresos - nuevo sistema
        r1="SELECT SUM(p1.cantidad*p2.preciocompra) AS total \n"
        r2="FROM (SELECT codsussan, SUM(cantidad) AS cantidad \n"
        r3="      FROM transferencia WHERE fecha BETWEEN '"+fecha1+" 00:00:00' \n"
        r4="                                     AND '"+fecha2+" 23:59:59' \n"
        r5="                               AND idsucorigen='"+sucursal+"' \n"
        r6="      GROUP BY codsussan) AS p1, productos AS p2 \n"
        r7="WHERE p1.codsussan = p2.codsussan "
        sql = r1+r2+r3+r4+r5+r6+r7
        print "Buscando valor al costo de items transferidos a esta sucursal (2)"
        datos = consultasBD.ordenCrudaDict(sql)
        try:
            datos = datos[0]
            itemsCostoTransferidosEnviados2 = Decimal(str(datos["total"])).quantize(Decimal("0.10"))
        except:
            itemsCostoTransferidosEnviados2 = Decimal("0.00")

        #transferencia en plata (precio costo): ingresos - viejo sistema
        r1="SELECT SUM(p7.total) AS total \n"
        r2="FROM (SELECT p5.codsussan,p5.ptc,p6.descri,p6.preciocompra,\n"
        r3="             p5.stock,p5.stock*p6.preciocompra as total \n"
        r4="      FROM (SELECT p4.codsussan,p3.ptc,p3.stock \n"
        r5="            FROM (SELECT p2.ptc, p2.cant as stock \n"
        r6="                  FROM (SELECT id FROM transferencias \n"
        r7="                        WHERE idsucdestino='"+sucursal+"' \n"
        r8="                              AND fecha BETWEEN '"+fecha1+" 00:00:00' \n"
        r9="                                        AND '"+fecha2+" 23:59:59') AS p1, \n"
        r0="                       transferenciastieneproductos AS p2 \n"
        rA="                  WHERE p1.id=p2.idtransferencia) AS p3, \n"
        rB="           producto_talle_color AS p4 \n"
        rC="      WHERE p4.id=p3.ptc) AS p5, productos AS p6 \n"
        rD="WHERE p5.codsussan=p6.codsussan) AS p7 "
        sql = r1+r2+r3+r4+r5+r6+r7+r8+r9+r0+rA+rB+rC+rD
        print "Buscando valor al costo de items transferidos a esta sucursal (1)"
        datos = consultasBD.ordenCrudaDict(sql)
        try:
            datos = datos[0]
            itemsCostoTransferidosRecibidos1 = Decimal(str(datos["total"])).quantize(Decimal("0.10"))
        except:
            itemsCostoTransferidosRecibidos1 = Decimal("0.00")

        #transferencia en plata (precio costo): ingresos - nuevo sistema
        r1="SELECT SUM(p1.cantidad*p2.preciocompra) AS total \n"
        r2="FROM (SELECT codsussan, SUM(cantidad) AS cantidad \n"
        r3="      FROM transferencia WHERE fecha BETWEEN '"+fecha1+" 00:00:00' \n"
        r4="                                     AND '"+fecha2+" 23:59:59' \n"
        r5="                               AND idsucdestino='"+sucursal+"' \n"
        r6="      GROUP BY codsussan) AS p1, productos AS p2 \n"
        r7="WHERE p1.codsussan = p2.codsussan "
        sql = r1+r2+r3+r4+r5+r6+r7
        print "Buscando valor al costo de items transferidos a esta sucursal (2)"
        datos = consultasBD.ordenCrudaDict(sql)
        try:
            datos = datos[0]
            itemsCostoTransferidosRecibidos2 = Decimal(str(datos["total"])).quantize(Decimal("0.10"))
        except:
            itemsCostoTransferidosRecibidos2 = Decimal("0.00")
        
        itemsCostoTransferidosEnviados = itemsCostoTransferidosEnviados1 + itemsCostoTransferidosEnviados2
        itemsCostoTransferidosRecibidos = itemsCostoTransferidosRecibidos1 + itemsCostoTransferidosRecibidos2

        #devoluciones realizadas
        r1="SELECT SUM(montoDevolucion) AS total FROM comprasdevoluciones \n"
        r2="WHERE fecha BETWEEN '"+fecha1+" 00:00:00' AND '"+fecha2+" 23:59:59' "
        sql = r1+r2
        print "Buscando monto de devoluciones realizadas"
        datos = consultasBD.ordenCrudaDict(sql)
        try:
            datos = datos[0]
            montoDevolucion = Decimal(str(datos["total"])).quantize(Decimal("0.10"))
        except:
            montoDevolucion = Decimal("0.00")
        #devoluciones de cosas que ni bien entran, se van.. no ingresan al stock
        r1 = "SELECT SUM(p1.total) AS total \n"
        r2 = "FROM (SELECT ci.cantidad * ci.costounidad AS total \n"
        r3 = "      FROM compras_items ci, compras c \n"
        r4 = "      WHERE c.fechaingreso BETWEEN '"+fecha1+" 00:00:00' \n"
        r5 = "            AND '"+fecha2+" 23:59:59' \n"
        r6 = "            AND ci.codsussan='DEV' \n"
        r7 = "            AND c.idfactura=ci.idfactura) AS p1 WHERE 1 "
        sql = r1+r2+r3+r4+r5+r6+r7
        print "Buscando monto de devoluciones de productos que no entraron en stock"
        datos1 = consultasBD.ordenCrudaDict(sql)
        try:
            datos1 = datos1[0]
            montoDevolucion+= Decimal(str(datos1["total"])).quantize(Decimal("0.10"))
        except:
            montoDevolucion+= Decimal("0.00")

        #monto compras realizadas (incluye iva, descuentos, etc)
        r1="SELECT SUM(total) AS total FROM compras \n"
        r2="WHERE fechaingreso BETWEEN '"+fecha1+" 00:00:00' AND '"+fecha2+" 23:59:59' "
        sql = r1+r2
        print "Buscando monto de compras realizadas"
        datos = consultasBD.ordenCrudaDict(sql)
        try:
            datos = datos[0]
            montoComprasTotal = Decimal(str(datos["total"])).quantize(Decimal("0.10"))
        except:
            montoComprasTotal = Decimal("0.00")

        #monto compras segun costo
        r1="SELECT SUM(total) AS total \n"
        r2="FROM (SELECT p2.cantidad,p2.costounidad, \n"
        r3="             p2.costounidad*p2.cantidad AS total \n"
        r4="      FROM (SELECT idfactura FROM compras \n"
        r5="            WHERE fechaingreso BETWEEN '"+fecha1+" 00:00:00' \n"
        r6="                               AND '"+fecha2+" 23:59:59' ) AS p1, \n"
        r7="            compras_items AS p2 \n"
        r8="      WHERE p2.idfactura=p1.idfactura) AS p3 \n"
        r9="WHERE 1 "
        sql = r1+r2+r3+r4+r5+r6+r7+r8+r9
        print "Buscando valor al costo de compras realizadas"
        datos = consultasBD.ordenCrudaDict(sql)
        try:
            datos = datos[0]
            montoComprasCosto = Decimal(str(datos["total"])).quantize(Decimal("0.10"))
        except:
            montoComprasCosto = Decimal("0.00")
        
        print "*"*66

        fecha = str(fecha)
        sucursal = str(sucursal)
        stockSegunItems = str(stockSegunItems)
        stockSegunCosto = str(stockSegunCosto)
        vendidoSegunPrecioVentas = str(vendidoSegunPrecioVentas)
        vendidoCosto = str(vendidoCosto)
        vendidoItems = str(vendidoItems)
        transferenciasEnviadas = str(transferenciasEnviadas)
        transferenciasRecibidas = str(transferenciasRecibidas)
        itemsCostoTransferidosEnviados = str(itemsCostoTransferidosEnviados)
        itemsCostoTransferidosRecibidos = str(itemsCostoTransferidosRecibidos)
        montoDevolucion = str(montoDevolucion)
        montoComprasTotal = str(montoComprasTotal)
        montoComprasCosto = str(montoComprasCosto)

        #grabando datos mensuales
        try:
            consultasBD.begin()
            r01 = "INSERT INTO estadisticasmensuales(fecha,sucursal,stockitems, \n"
            r02 = "stckPcompra,vdoCosto,vdoItems,transfEnviadas,transfRecibidas, \n"
            r03 = "itCtoTfEnviado,itCtoTfRecibido,mtoDev,mtoComTotal,mtoComCosto, \n"
            r04 = "vdoSPVta) VALUES \n"
            r05 = "('%s','%s','%s','%s'," % (fecha,sucursal,stockSegunItems,stockSegunCosto)
            r06 = " '%s','%s','%s'," % (vendidoCosto,vendidoItems,transferenciasEnviadas)
            r07 = " '%s','%s'," % (transferenciasRecibidas,itemsCostoTransferidosEnviados)
            r08 = " '%s','%s'," % (itemsCostoTransferidosRecibidos,montoDevolucion)
            r09 = " '%s','%s','%s')" % (montoComprasTotal,montoComprasCosto,vendidoSegunPrecioVentas)
            sql = r01+r02+r03+r04+r05+r06+r07+r08+r09
            sincronizar_tabla.addChange(sql=sql)
            consultasBD.executaSinCommit(None, sql)
            consultasBD.commit()
            sincronizar_tabla.syncServerTables(None, ["estadisticasmensuales"])
        except:
            print "No pudo almacenarse datos mensuales"
            consultasBD.rollback()

    def OnMensual(self, event):
        self.almacenaDatosMensuales()

    def OnReenviarEmailAgradecimientos(self, event):
        import mailagradecimientosfecha
        agradecimientos = mailagradecimientosfecha.Dialog1(self)
        try:
            agradecimientos.ShowModal()
        except:
            pass

    def OnReservados(self, event):
        fecha1,fecha2 = self.rangoFecha()
        fecha1 = fecha1[:10]
        fecha1 = utiles.invertirFecha2(fecha1)
        fecha2 = fecha2[:10]
        fecha2 = utiles.invertirFecha2(fecha2)
        if fecha1==fecha2:
            fecha = fecha1
        else:
            fecha = fecha1+"/"+fecha2
        f=open("c:\\matrisamor.doc\\reporte-reportedeventas.html","w");f.close()
        f=open("c:\\matrisamor.doc\\reporte-otrosreportes.html","w");f.close()
        self.imprimirEncabezadoCierreDiario(fecha)
        ventas = self.consultasVentas()
        if ventas==() or ventas==None or len(ventas)==0:
            print "No se genera listado de Ventas: no hubo movimientos"
        else:
            self.reportesVentas(ventas,fecha,"1")
        ranking = self.consultasProveedoresVendidos()
        if ranking==() or ranking==None or len(ranking)==0:
            print "No se genera listado de Ranking: no hubo movimientos"
        else:
            self.rankingProveedores(ranking,fecha1)
        impreso = self.imprimirTransferenciasPendientes(fecha1)
        impreso = self.imprimirTransferenciasPendientes2(fecha1)
        aprobados = self.consultasAjustesAprobadosCtasCtes()
        pendientes = self.consultasAjustesPendientesCtasCtes()
        if aprobados==() and pendientes ==():
            print "No se genera listado de Ajustes: no hubo movimientos"
        else:
            self.imprimirReportesDeAjustesCtasCtes(aprobados,pendientes,fecha)
        compras = self.consultasCompras()
        devoluciones = self.consultasDevoluciones()
        sugerencias = self.consultasSugerencias()
        if compras == () and devoluciones == () and sugerencias == ():
            print "No se genera listado de Compras y Devoluciones: no hubo movimientos"
        else:
            self.imprimirReportesDeCompras(compras,devoluciones,sugerencias,fecha)

        import os
        os.system("c:\\explorer.lnk c:\\matrisamor.doc\\reporte-reportedeventas.html")
        os.system("c:\\explorer.lnk c:\\matrisamor.doc\\reporte-otrosreportes.html")

